diff --git a/AMDiS/src/ElInfo2d.cc b/AMDiS/src/ElInfo2d.cc
index 95985f1dcb80d1d56c47c1ad9f1ceb38e9c4d583..993cb4541db1f38c609762ec6b6c8bcf63df9240 100644
--- a/AMDiS/src/ElInfo2d.cc
+++ b/AMDiS/src/ElInfo2d.cc
@@ -245,7 +245,7 @@ namespace AMDiS {
 		break;
 		
 	      case 1:
-		// The commonedge is the edge 1 of this element.
+		// The common edge is the edge 1 of this element.
 		switch (edgeNo) {
 		case 0:
 		  neighbourCoord[i][0] = macroNeighbour->coord[1];
diff --git a/AMDiS/src/parallel/PetscSolverFeti.cc b/AMDiS/src/parallel/PetscSolverFeti.cc
index f3751fbf9fa650531402227bea4a15edbf4ab511..04bd93dc1b8c2737bf8a038763ea03d55c9009e4 100644
--- a/AMDiS/src/parallel/PetscSolverFeti.cc
+++ b/AMDiS/src/parallel/PetscSolverFeti.cc
@@ -786,37 +786,39 @@ namespace AMDiS {
       if (it->rankObj.subObj == FACE)
 	allFaces[it.getRank()].insert(it->rankObj);
 
+
+    std::set<BoundaryObject> allMyEdges;
+    TraverseStack stack;
+    ElInfo *elInfo = stack.traverseFirst(meshDistributor->getMesh(), 0, Mesh::CALL_EL_LEVEL | Mesh::FILL_BOUND);
+    while (elInfo) {      
+      Element *el = elInfo->getElement();
+      for (int i = 0; i < el->getGeo(EDGE); i++) {
+	BoundaryObject bobj(el, elInfo->getType(), EDGE, i);
+	if (intBound.getDegreeOwn(bobj) == 1 && elInfo->getBoundary(EDGE, i) == INTERIOR) {
+	  allMyEdges.insert(bobj);
+	}
+      }
+      elInfo = stack.traverseNext(elInfo);
+    }
+
+
+
     for (map<int, std::set<BoundaryObject> >::iterator it = allFaces.begin();
 	 it != allFaces.end(); ++it) {
-      MSG("SIZE = %d\n", it->second.size());
       if (it->second.size() == 2) {
 	vector<AtomicBoundary> &bs = intBound.getOwn()[it->first];
 	for (int i = 0; i < static_cast<int>(bs.size()); i++) {
 	  if (bs[i].rankObj.subObj == EDGE &&
-	      intBound.getDegreeOwn(bs[i].rankObj) == 3) {
+	      intBound.getDegreeOwn(bs[i].rankObj) == 1 &&
+	      allMyEdges.count(bs[i].rankObj)) {
 	    MSG("FOUND AN EDGE: %d %d %d\n", 
 		bs[i].rankObj.elIndex, bs[i].rankObj.subObj, bs[i].rankObj.ithObj);
+	    it->second.insert(bs[i].rankObj);
 	  }	      
 	}	  
       }
     }
 
-    int nBound = 0;
-    int nInterior = 0;
-    TraverseStack stack;
-    ElInfo *elInfo = stack.traverseFirst(meshDistributor->getMesh(), 0, Mesh::CALL_EL_LEVEL | Mesh::FILL_BOUND);
-    while (elInfo) {      
-      MSG("INSIDE!\n");
-      Element *el = elInfo->getElement();
-      for (int i = 0; i < el->getGeo(EDGE); i++) {
-	BoundaryObject bobj(el, elInfo->getType(), EDGE, i);
-	MSG("CHECK FOR %d/%d/%d (%d)\n", el->getIndex(), EDGE, i, intBound.getDegreeOwn(bobj));	
-	if (intBound.getDegreeOwn(bobj) == 1)
-	  MSG("B = %d (%d)\n", elInfo->getBoundary(EDGE, i), INTERIOR);
-      }
-      elInfo = stack.traverseNext(elInfo);
-    }
-
 
     int nEmptyFaces = 0;
     vector<vector<BoundaryObject> > data;