diff --git a/AMDiS/src/parallel/InteriorBoundary.h b/AMDiS/src/parallel/InteriorBoundary.h
index eb69baa66e08ed397b3c830ec4be354e6c47b82c..3102165e7eb4828ac6d3595b322e8ff73a62b86d 100644
--- a/AMDiS/src/parallel/InteriorBoundary.h
+++ b/AMDiS/src/parallel/InteriorBoundary.h
@@ -113,9 +113,12 @@ namespace AMDiS {
       {
 	if (level > 0) {
 	  int r = levelData->mapRank(mapIt->first, level - 1, level);
+
 	  TEST_EXIT_DBG(r >= 0)
 	    ("Mapping rank %d from level % to level %d does not work!\n",
 	     mapIt->first, level - 1, level);
+
+	  return r;
 	}
 
 	return mapIt->first;
diff --git a/AMDiS/src/parallel/MeshDistributor.cc b/AMDiS/src/parallel/MeshDistributor.cc
index 55bf0f53e40ee832dcc4db8250af2bb2255f145f..027993db02295f18f69375e420708415f6c6439f 100644
--- a/AMDiS/src/parallel/MeshDistributor.cc
+++ b/AMDiS/src/parallel/MeshDistributor.cc
@@ -1873,7 +1873,8 @@ namespace AMDiS {
   }
 
 
-  void MeshDistributor::createBoundaryDofs(const FiniteElemSpace *feSpace, int level)
+  void MeshDistributor::createBoundaryDofs(const FiniteElemSpace *feSpace, 
+					   int level)
   {
     FUNCNAME("MeshDistributor::createBoundaryDofs()");
 
@@ -1893,7 +1894,8 @@ namespace AMDiS {
 	    DofContainer dofs;
 	    it->rankObj.el->getAllDofs(feSpace, it->rankObj, dofs);
 
-	    DofContainer& tmp = sendDofs.getDofContainer(it.getRank(), feSpace, level);
+	    DofContainer& tmp = 
+	      sendDofs.getDofContainer(it.getRank(), feSpace, level);
 	    tmp.insert(tmp.end(), dofs.begin(), dofs.end());
 
 	    if (createBoundaryDofFlag.isSet(BOUNDARY_FILL_INFO_SEND_DOFS))
@@ -1910,7 +1912,8 @@ namespace AMDiS {
 	    DofContainer dofs;
 	    it->rankObj.el->getAllDofs(feSpace, it->rankObj, dofs);
 
-	    DofContainer& tmp = recvDofs.getDofContainer(it.getRank(), feSpace, level);
+	    DofContainer& tmp = 
+	      recvDofs.getDofContainer(it.getRank(), feSpace, level);
 	    tmp.insert(tmp.end(), dofs.begin(), dofs.end());
 
 	    if (createBoundaryDofFlag.isSet(BOUNDARY_FILL_INFO_RECV_DOFS))
diff --git a/AMDiS/src/parallel/ParallelDofMapping.cc b/AMDiS/src/parallel/ParallelDofMapping.cc
index 87e678d5c74565e8c57254a9f6dc4f714470b6f9..927847cd2c3746e32b0abc29bf915b6f959195b6 100644
--- a/AMDiS/src/parallel/ParallelDofMapping.cc
+++ b/AMDiS/src/parallel/ParallelDofMapping.cc
@@ -87,6 +87,7 @@ namespace AMDiS {
     // === other ranks that also include this DOF.                           ===
 
     StdMpi<vector<int> > stdMpi(levelData->getMpiComm(level));
+
     for (DofComm::Iterator it(*sendDofs, level, feSpace); 
 	 !it.end(); it.nextRank())
       for (; !it.endDofIter(); it.nextDof())
@@ -108,7 +109,7 @@ namespace AMDiS {
 	}
       }
 
-      if (recvFromRank) 
+      if (recvFromRank)
 	stdMpi.recv(it.getRank());
     }
 
@@ -159,6 +160,8 @@ namespace AMDiS {
   {
     FUNCNAME("ParallelDofMapping::clear()");
 
+    TEST_EXIT_DBG(levelData)("No mesh level data object defined!\n");
+
     for (vector<const FiniteElemSpace*>::iterator it = feSpacesUnique.begin();
 	 it != feSpacesUnique.end(); ++it)
       data[*it].clear();
diff --git a/AMDiS/src/parallel/PetscSolverFeti.cc b/AMDiS/src/parallel/PetscSolverFeti.cc
index d1e6df6269d6232364dcadd3f6a180d4e04b3c6e..4cfd74ae934f72e33a4c82ff2a9c1bf1c86dc057 100644
--- a/AMDiS/src/parallel/PetscSolverFeti.cc
+++ b/AMDiS/src/parallel/PetscSolverFeti.cc
@@ -284,29 +284,35 @@ namespace AMDiS {
     dualDofMap.clear();
     lagrangeMap.clear();
     localDofMap.clear();
-    interiorDofMap.clear();
+    if (fetiPreconditioner == FETI_DIRICHLET)
+      interiorDofMap.clear();
+
+    primalDofMap.setDofComm(meshDistributor->getSendDofs(),
+			    meshDistributor->getRecvDofs());
+    lagrangeMap.setDofComm(meshDistributor->getSendDofs(), 
+			   meshDistributor->getRecvDofs());
 
     for (unsigned int i = 0; i < meshDistributor->getFeSpaces().size(); i++) {
       const FiniteElemSpace *feSpace = meshDistributor->getFeSpace(i);
 
       createPrimals(feSpace);      
-      createDuals(feSpace);
-      createLagrange(feSpace);      
+      createDuals(feSpace);      
       createIndexB(feSpace);
     }
 
-    primalDofMap.setDofComm(meshDistributor->getSendDofs(),
-			    meshDistributor->getRecvDofs());
-    lagrangeMap.setDofComm(meshDistributor->getSendDofs(), 
-			   meshDistributor->getRecvDofs());
-
     primalDofMap.update();
     dualDofMap.update();
-    lagrangeMap.update();
     localDofMap.update();
     if (fetiPreconditioner != FETI_NONE)
       interiorDofMap.update();
 
+    for (unsigned int i = 0; i < meshDistributor->getFeSpaces().size(); i++) {
+      const FiniteElemSpace *feSpace = meshDistributor->getFeSpace(i);
+      createLagrange(feSpace);
+    }
+    lagrangeMap.update();
+
+
     for (unsigned int i = 0; i < meshDistributor->getFeSpaces().size(); i++) {
       const FiniteElemSpace *feSpace = meshDistributor->getFeSpace(i);
       MSG("FETI-DP data for %d-ith FE space:\n", i);