diff --git a/AMDiS/src/parallel/DofComm.cc b/AMDiS/src/parallel/DofComm.cc
index 52660d1b4c8c0b2158ef379821de368e10a4cab8..0ec8f96357cf1038d3fecf9996f958968ad7e589 100644
--- a/AMDiS/src/parallel/DofComm.cc
+++ b/AMDiS/src/parallel/DofComm.cc
@@ -44,7 +44,12 @@ namespace AMDiS {
 
   void DofComm::create(InteriorBoundary &boundary)
   {
+    FUNCNAME("DofComm::create()");
+
+    MSG("---> senddofs\n");
     createContainer(boundary.getOwn(), sendDofs);
+
+    MSG("---> recvdofs\n");
     createContainer(boundary.getOther(), recvDofs);
   }
 
diff --git a/AMDiS/src/parallel/InteriorBoundary.cc b/AMDiS/src/parallel/InteriorBoundary.cc
index 020a3f295c1d0c516c768a629794c3ed989fcf94..5451e74aafede2c0e849eca1b1fd0c7fd430e467 100644
--- a/AMDiS/src/parallel/InteriorBoundary.cc
+++ b/AMDiS/src/parallel/InteriorBoundary.cc
@@ -72,7 +72,6 @@ namespace AMDiS {
 	  continue;
 
 	int owner = elObjDb.getIterateOwner(level);
-	MSG("OWNER IN LEVEL %d IS %d\n",level, owner);
 	ElementObjectData& rankBoundEl = objData[globalMpiRank];
 	
 	AtomicBoundary bound;
diff --git a/AMDiS/src/parallel/MeshDistributor.cc b/AMDiS/src/parallel/MeshDistributor.cc
index da24936a307896873136b9958865afe1f6522d40..3786a0d9529750105ee35372f70ab6527e028ef0 100644
--- a/AMDiS/src/parallel/MeshDistributor.cc
+++ b/AMDiS/src/parallel/MeshDistributor.cc
@@ -1535,12 +1535,11 @@ namespace AMDiS {
     dofComm.init(0, levelData, feSpaces);
     dofComm.create(intBoundary);
 
-#if 0
     if (levelData.getLevelNumber() > 1) {
-      dofCommSd.init(1, levelData, feSpaces);
-      dofCommSd.create(intBoundary);
+      MSG("START CREATE DOF-COMM-SD\n");
+      dofCommSd.init(0, levelData, feSpaces);
+      dofCommSd.create(intBoundarySd);
     }
-#endif
 
     // === If requested, create more information on communication DOFs. ===
     
diff --git a/AMDiS/src/parallel/MeshDistributor.h b/AMDiS/src/parallel/MeshDistributor.h
index 0686801a42eb37ac96ca91535ace1b095371c111..c0a2d1ab7fa8dd99ccd1983a569d3ba43b071d13 100644
--- a/AMDiS/src/parallel/MeshDistributor.h
+++ b/AMDiS/src/parallel/MeshDistributor.h
@@ -162,11 +162,21 @@ namespace AMDiS {
       return dofComm;
     }
 
+    DofComm& getDofCommSd()
+    {
+      return dofCommSd;
+    }
+
     InteriorBoundary& getIntBoundary()
     {
       return intBoundary;
     }
 
+    InteriorBoundary& getIntBoundarySd()
+    {
+      return intBoundarySd;
+    }
+
     inline long getLastMeshChangeIndex()
     {
       return lastMeshChangeIndex;
diff --git a/test/mpi/data/data0006/dofcomm_level_1.dat b/test/mpi/data/data0006/dofcomm_level_1.dat
new file mode 100644
index 0000000000000000000000000000000000000000..fc634ebc37ad909cf1654e575fc59208a328e14f
--- /dev/null
+++ b/test/mpi/data/data0006/dofcomm_level_1.dat
@@ -0,0 +1,17 @@
+# rank_id    n_own_dofs    n_other_dofs
+0 0 5
+1 2 3
+2 0 5
+3 2 3
+4 2 3
+5 5 0
+6 2 3
+7 5 0
+8 0 5
+9 2 3
+10 0 5
+11 2 3
+12 2 3
+13 5 0
+14 2 3
+15 5 0
diff --git a/test/mpi/data/data0006/interior_boundary_p0.ser b/test/mpi/data/data0006/interior_boundary_p0.ser
new file mode 100644
index 0000000000000000000000000000000000000000..c230d070cb5668e1c088410570479ed22a04ef0d
Binary files /dev/null and b/test/mpi/data/data0006/interior_boundary_p0.ser differ
diff --git a/test/mpi/data/data0006/interior_boundary_p1.ser b/test/mpi/data/data0006/interior_boundary_p1.ser
new file mode 100644
index 0000000000000000000000000000000000000000..63aae7d5bf240504fb63e24d9076154a5ce83a31
Binary files /dev/null and b/test/mpi/data/data0006/interior_boundary_p1.ser differ
diff --git a/test/mpi/data/data0006/interior_boundary_p10.ser b/test/mpi/data/data0006/interior_boundary_p10.ser
new file mode 100644
index 0000000000000000000000000000000000000000..80a60b5432510fb834e4aae5e45223454ce109da
Binary files /dev/null and b/test/mpi/data/data0006/interior_boundary_p10.ser differ
diff --git a/test/mpi/data/data0006/interior_boundary_p11.ser b/test/mpi/data/data0006/interior_boundary_p11.ser
new file mode 100644
index 0000000000000000000000000000000000000000..5737ad1ffd644e92951e7ecf7c10537bcf479aff
Binary files /dev/null and b/test/mpi/data/data0006/interior_boundary_p11.ser differ
diff --git a/test/mpi/data/data0006/interior_boundary_p12.ser b/test/mpi/data/data0006/interior_boundary_p12.ser
new file mode 100644
index 0000000000000000000000000000000000000000..fbbaf66529e4c006aa747fb4f96a3537255a3493
Binary files /dev/null and b/test/mpi/data/data0006/interior_boundary_p12.ser differ
diff --git a/test/mpi/data/data0006/interior_boundary_p13.ser b/test/mpi/data/data0006/interior_boundary_p13.ser
new file mode 100644
index 0000000000000000000000000000000000000000..49dc5f60595fb78f04c21c6d6ea90f6d47f51336
Binary files /dev/null and b/test/mpi/data/data0006/interior_boundary_p13.ser differ
diff --git a/test/mpi/data/data0006/interior_boundary_p14.ser b/test/mpi/data/data0006/interior_boundary_p14.ser
new file mode 100644
index 0000000000000000000000000000000000000000..8880e292d4438ae17656d334c50cc770cc71b2a4
Binary files /dev/null and b/test/mpi/data/data0006/interior_boundary_p14.ser differ
diff --git a/test/mpi/data/data0006/interior_boundary_p15.ser b/test/mpi/data/data0006/interior_boundary_p15.ser
new file mode 100644
index 0000000000000000000000000000000000000000..7c839a8ae54d482cb748ff0cfaade00d5f148445
Binary files /dev/null and b/test/mpi/data/data0006/interior_boundary_p15.ser differ
diff --git a/test/mpi/data/data0006/interior_boundary_p2.ser b/test/mpi/data/data0006/interior_boundary_p2.ser
new file mode 100644
index 0000000000000000000000000000000000000000..277ea3203ba3bcdd20b520ec87f33194c8667839
Binary files /dev/null and b/test/mpi/data/data0006/interior_boundary_p2.ser differ
diff --git a/test/mpi/data/data0006/interior_boundary_p3.ser b/test/mpi/data/data0006/interior_boundary_p3.ser
new file mode 100644
index 0000000000000000000000000000000000000000..5a54c7ebbff83cf11d48807c413891f33ec56411
Binary files /dev/null and b/test/mpi/data/data0006/interior_boundary_p3.ser differ
diff --git a/test/mpi/data/data0006/interior_boundary_p4.ser b/test/mpi/data/data0006/interior_boundary_p4.ser
new file mode 100644
index 0000000000000000000000000000000000000000..13f7c3d6448fe4b4962cb64a7dc5ff84965ee762
Binary files /dev/null and b/test/mpi/data/data0006/interior_boundary_p4.ser differ
diff --git a/test/mpi/data/data0006/interior_boundary_p5.ser b/test/mpi/data/data0006/interior_boundary_p5.ser
new file mode 100644
index 0000000000000000000000000000000000000000..892e8fcf6cf438d7af1d6da020a238ed1035f37f
Binary files /dev/null and b/test/mpi/data/data0006/interior_boundary_p5.ser differ
diff --git a/test/mpi/data/data0006/interior_boundary_p6.ser b/test/mpi/data/data0006/interior_boundary_p6.ser
new file mode 100644
index 0000000000000000000000000000000000000000..609c5d881e0cc4dc11fdfbeb6a0ad6061c80d90e
Binary files /dev/null and b/test/mpi/data/data0006/interior_boundary_p6.ser differ
diff --git a/test/mpi/data/data0006/interior_boundary_p7.ser b/test/mpi/data/data0006/interior_boundary_p7.ser
new file mode 100644
index 0000000000000000000000000000000000000000..09ca2ba45d44dd5b987771c5c001b0c618a29946
Binary files /dev/null and b/test/mpi/data/data0006/interior_boundary_p7.ser differ
diff --git a/test/mpi/data/data0006/interior_boundary_p8.ser b/test/mpi/data/data0006/interior_boundary_p8.ser
new file mode 100644
index 0000000000000000000000000000000000000000..728777c06dd495a8313d3e4b99649dda818cd55b
Binary files /dev/null and b/test/mpi/data/data0006/interior_boundary_p8.ser differ
diff --git a/test/mpi/data/data0006/interior_boundary_p9.ser b/test/mpi/data/data0006/interior_boundary_p9.ser
new file mode 100644
index 0000000000000000000000000000000000000000..f771930413fd346fb43f950f97f99509a55ca91d
Binary files /dev/null and b/test/mpi/data/data0006/interior_boundary_p9.ser differ
diff --git a/test/mpi/init/test0006.dat.2d b/test/mpi/init/test0006.dat.2d
new file mode 100644
index 0000000000000000000000000000000000000000..f1e917797114064f40fc177f9d9a536e3879dcc9
--- /dev/null
+++ b/test/mpi/init/test0006.dat.2d
@@ -0,0 +1,25 @@
+dimension of world:             2
+
+elliptMesh->macro file name:    ./macro/macro.stand.p16.2d
+elliptMesh->global refinements: 3
+
+ellipt->mesh:                   elliptMesh
+ellipt->dim:                    2
+ellipt->components:             1
+ellipt->polynomial degree[0]:   1
+ 
+ellipt->solver:                 cg
+ellipt->solver->max iteration:  10
+ellipt->solver->tolerance:      1.e-8
+ellipt->solver->info:           10
+ellipt->solver->left precon:    diag
+ellipt->solver->right precon:   no
+
+ellipt->estimator[0]:              0
+ellipt->marker[0]->strategy:       0 
+
+parallel->log main rank:     0
+parallel->pre refine:        0
+parallel->partitioner:       checker
+parallel->multi level test:  1
+parallel->solver:            petsc-feti
diff --git a/test/mpi/src/test0002.cc b/test/mpi/src/test0002.cc
index 3ddc94d63397bc05882b3454be2793b48b1cecac..a2f54a1fa0ef06d0ca8219b46687b3193a6f1a00 100644
--- a/test/mpi/src/test0002.cc
+++ b/test/mpi/src/test0002.cc
@@ -9,7 +9,8 @@ using namespace AMDiS;
 using namespace std;
 
 /*
-  - 
+  - Simple FETI-DP test on the number of local and global primal, dual and
+    interior nodes.
 */
 
 BOOST_AUTO_TEST_CASE(amdis_mpi_feti)
diff --git a/test/mpi/src/test0003.cc b/test/mpi/src/test0003.cc
index 2706d109d873d61d01da6f27ba1c66e111d9210e..31109f2ad1e60d415acbd33cb5e44eb7c6d1744d 100644
--- a/test/mpi/src/test0003.cc
+++ b/test/mpi/src/test0003.cc
@@ -11,7 +11,7 @@ using namespace std;
 using boost::lexical_cast;
 
 /*
-  - 
+  - Test 2-level FETI-DP on the number of global primal and dual nodes.
 */
 
 BOOST_AUTO_TEST_CASE(amdis_mpi_feti_multilevel)
diff --git a/test/mpi/src/test0004.cc b/test/mpi/src/test0004.cc
index ac4c48451bb0c4bfed1b9418cd791d255ff342af..b0d15b540a2a50125d57211c4d3657fed0a39044 100644
--- a/test/mpi/src/test0004.cc
+++ b/test/mpi/src/test0004.cc
@@ -9,7 +9,7 @@ using namespace AMDiS;
 using namespace std;
 
 /*
-  - 
+  - Test DOF communicator on 2-level decomposition of a 4x4 rank domain.
 */
 
 BOOST_AUTO_TEST_CASE(amdis_mpi_feti_multilevel)
diff --git a/test/mpi/src/test0005.cc b/test/mpi/src/test0005.cc
index a136c26b0a16e759e65979c2d117ea71460c3c84..38a372c9e7f1628f416b0db74bceaaab2fbb0deb 100644
--- a/test/mpi/src/test0005.cc
+++ b/test/mpi/src/test0005.cc
@@ -9,7 +9,8 @@ using namespace AMDiS;
 using namespace std;
 
 /*
-  - 
+  - Test for interior boundaries on a 2-level 4x4 rank decomposition.
+  - Compaires the interior boundary object with a serialization file.
 */
 
 
diff --git a/test/mpi/src/test0006.cc b/test/mpi/src/test0006.cc
new file mode 100644
index 0000000000000000000000000000000000000000..3c7f9ae580b013368e6f8c7a548f2afb0e983807
--- /dev/null
+++ b/test/mpi/src/test0006.cc
@@ -0,0 +1,88 @@
+#define BOOST_TEST_DYN_LINK
+#define BOOST_TEST_MODULE 0005
+#define BOOST_TEST_NO_MAIN
+
+#include <boost/test/unit_test.hpp>
+#include <AMDiS.h>
+
+using namespace AMDiS;
+using namespace std;
+
+/*
+  - Test for interior boundaries of the subdomains on a 2-level 
+     4x4 rank decomposition.
+  - Compaires the interior boundary object with a serialization file.
+  - Test for DOF communicators on the subdomains.
+*/
+
+
+void boundaryTest(RankToBoundMap &map0, RankToBoundMap &map1)
+{
+  BOOST_CHECK_MESSAGE(map0.size() == map1.size(), 
+		      "Boundaries have different size!\n");
+
+  for (RankToBoundMap::iterator it = map0.begin(); it != map0.end(); ++it) {
+    if (map1.count(it->first) == 0) {
+      MSG("Boundary with rank %d missing!\n", it->first);
+      BOOST_ERROR("");
+    }
+
+    BOOST_CHECK_MESSAGE(it->second.size() == map1[it->first].size(), 
+			"Wrong boundary size!\n");
+
+    for (unsigned int i = 0; i < it->second.size(); i++)
+      BOOST_CHECK_MESSAGE(it->second[i] == map1[it->first][i],
+			  "Boundary is not equal!\n");
+  }
+}
+
+BOOST_AUTO_TEST_CASE(amdis_mpi_feti_multilevel)
+{
+  BOOST_REQUIRE(MPI::COMM_WORLD.Get_size() == 16);
+
+  ProblemStat ellipt("ellipt");
+  ellipt.initialize(INIT_ALL);
+
+  MeshDistributor *meshDist = MeshDistributor::globalMeshDistributor;
+  meshDist->initParallelization();
+  
+  const FiniteElemSpace *feSpace = ellipt.getFeSpace();
+
+  InteriorBoundary testBoundary;  
+  string filename = "data/data0006/interior_boundary_p" + 
+    lexical_cast<string>(MPI::COMM_WORLD.Get_rank()) + ".ser";
+  ifstream myfile(filename.c_str());
+  testBoundary.deserialize(myfile, ellipt.getMesh());
+  myfile.close();
+
+  boundaryTest(testBoundary.getOwn(), meshDist->getIntBoundarySd().getOwn());
+  boundaryTest(testBoundary.getOther(), meshDist->getIntBoundarySd().getOther());
+  boundaryTest(testBoundary.getPeriodic(), meshDist->getIntBoundarySd().getPeriodic());
+
+
+
+  Spreadsheet sheet;
+  sheet.read("data/data0006/dofcomm_level_1.dat");
+  vector<vector<double> > &data = sheet.getData();
+
+  DofComm &dofCommSd = meshDist->getDofCommSd();
+  DofComm::LevelDataType &sendDofsSd = dofCommSd.getSendDofs();
+  DofComm::LevelDataType &recvDofsSd = dofCommSd.getRecvDofs();
+  int nSendDofs = dofCommSd.getNumberDofs(sendDofsSd, 0, feSpace);
+  int nRecvDofs = dofCommSd.getNumberDofs(recvDofsSd, 0, feSpace);
+
+  int rank = MPI::COMM_WORLD.Get_rank();
+  BOOST_CHECK(data[rank][0] == rank);
+  BOOST_CHECK(data[rank][1] == nSendDofs);
+  BOOST_CHECK(data[rank][2] == nRecvDofs);
+}
+
+
+int main(int argc, char **argv)
+{
+  AMDiS::init(argc, argv, "./init/test0006.dat.2d");
+
+  boost::unit_test::unit_test_main(&init_unit_test, argc, argv);
+
+  AMDiS::finalize();
+}