diff --git a/AMDiS/bin/Makefile.am b/AMDiS/bin/Makefile.am
index 66f1fe5ef28a3c70bc5936e3835f908fa4afe5d6..800f126018510ad909568c16e734bee575d1e3ac 100644
--- a/AMDiS/bin/Makefile.am
+++ b/AMDiS/bin/Makefile.am
@@ -38,7 +38,7 @@ INCLUDES = $(AMDIS_INCLUDES) $(PARALLEL_INCLUDES)
 if AMDIS_DEBUG
   libamdis_la_CXXFLAGS += -g -O0 -Wall -DDEBUG=1 $(OPENMP_FLAG) -ftemplate-depth-30 $(INCLUDES) #-pedantic
 else
-  libamdis_la_CXXFLAGS += -O3 -Wall -DDEBUG=0 $(OPENMP_FLAG) -ftemplate-depth-30 $(INCLUDES) #-pedantic
+  libamdis_la_CXXFLAGS += -O2 -Wall -DDEBUG=0 $(OPENMP_FLAG) -ftemplate-depth-30 $(INCLUDES) #-pedantic
 endif
 
 
diff --git a/AMDiS/bin/Makefile.in b/AMDiS/bin/Makefile.in
index 5a344dab4e41f227649b97a7a777955a184b6e82..aa26c1cae64e416aefcde4599d96702e52cfee64 100644
--- a/AMDiS/bin/Makefile.in
+++ b/AMDiS/bin/Makefile.in
@@ -42,7 +42,7 @@ host_triplet = @host@
 @ENABLE_UMFPACK_TRUE@                    -I$(LIB_DIR)/UMFPACK/Include  
 
 @AMDIS_DEBUG_TRUE@am__append_3 = -g -O0 -Wall -DDEBUG=1 $(OPENMP_FLAG) -ftemplate-depth-30 $(INCLUDES) #-pedantic
-@AMDIS_DEBUG_FALSE@am__append_4 = -O3 -Wall -DDEBUG=0 $(OPENMP_FLAG) -ftemplate-depth-30 $(INCLUDES) #-pedantic
+@AMDIS_DEBUG_FALSE@am__append_4 = -O2 -Wall -DDEBUG=0 $(OPENMP_FLAG) -ftemplate-depth-30 $(INCLUDES) #-pedantic
 subdir = bin
 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in
 ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
diff --git a/AMDiS/src/Assembler.cc b/AMDiS/src/Assembler.cc
index a3fab99fb3751492ad638afbd00a379987a22567..544553551a623ef3db9ed5d039bf69ec83ff6f4e 100644
--- a/AMDiS/src/Assembler.cc
+++ b/AMDiS/src/Assembler.cc
@@ -150,7 +150,7 @@ namespace AMDiS {
 
     const DOFVectorBase<double>* vec = dv ? dv : owner->operat->getUhOld();
 
-    TEST_EXIT(vec)("no dof vector!\n");
+    TEST_EXIT_DBG(vec)("no dof vector!\n");
 
     if (valuesAtQPs[vec] && valuesAtQPs[vec]->valid) 
       return valuesAtQPs[vec]->values.getValArray();
@@ -206,7 +206,7 @@ namespace AMDiS {
 
     const DOFVectorBase<double>* vec = dv ? dv : owner->operat->getUhOld();
 
-    TEST_EXIT(vec)("no dof vector!\n");
+    TEST_EXIT_DBG(vec)("no dof vector!\n");
 
     if (gradientsAtQPs[vec] && gradientsAtQPs[vec]->valid) 
       return gradientsAtQPs[vec]->values.getValArray();
diff --git a/AMDiS/src/Assembler.h b/AMDiS/src/Assembler.h
index c3cf09d4ecdf6718f9e84b76365bdedd1100f2e8..301eb2b3799abfc734d230feef8ac90ca9fb5050 100644
--- a/AMDiS/src/Assembler.h
+++ b/AMDiS/src/Assembler.h
@@ -132,7 +132,6 @@ namespace AMDiS {
      * Sets \ref quadrature to q.
      */
     inline void setQuadrature(Quadrature* q) {
-      /*     TEST_EXIT(!quadrature)("quadrature already set\n"); */
       quadrature = q;
     };
   
@@ -1015,22 +1014,22 @@ namespace AMDiS {
 			Quadrature *quad1GrdPhi,
 			Quadrature *quad0) 
     {
-      if(secondOrderAssembler) {
+      if (secondOrderAssembler) {
 	TEST_EXIT(!secondOrderAssembler->getQuadrature())
 	  ("quadrature already existing\n");
 	secondOrderAssembler->setQuadrature(quad2);
       }
-      if(firstOrderAssemblerGrdPsi) {
+      if (firstOrderAssemblerGrdPsi) {
 	TEST_EXIT(!firstOrderAssemblerGrdPsi->getQuadrature())
 	  ("quadrature already existing\n");
 	firstOrderAssemblerGrdPsi->setQuadrature(quad1GrdPsi);
       }
-      if(firstOrderAssemblerGrdPhi) {
+      if (firstOrderAssemblerGrdPhi) {
 	TEST_EXIT(!firstOrderAssemblerGrdPhi->getQuadrature())
 	  ("quadrature already existing\n");
 	firstOrderAssemblerGrdPhi->setQuadrature(quad1GrdPhi);
       }
-      if(zeroOrderAssembler) {
+      if (zeroOrderAssembler) {
 	TEST_EXIT(!zeroOrderAssembler->getQuadrature())
 	  ("quadrature already existing\n");
 	zeroOrderAssembler->setQuadrature(quad0);
diff --git a/AMDiS/src/CoarseningManager1d.h b/AMDiS/src/CoarseningManager1d.h
index 605f0bc24145d96f224fad22c3915974f15c039c..1f08d97d4bb2b07ae35779f256746c0a2b20f7b7 100644
--- a/AMDiS/src/CoarseningManager1d.h
+++ b/AMDiS/src/CoarseningManager1d.h
@@ -43,10 +43,7 @@ namespace AMDiS {
     /** \brief
      * Calls base class constructor and checks dimension of mesh. 
      */
-    CoarseningManager1d() : CoarseningManager() {
-      //     FUNCNAME("CoarseningManager1d::CoarseningManager1d");
-      //     TEST_EXIT(mesh->getDim()==1)("mesh->dim != 1\n");
-    };
+    CoarseningManager1d() : CoarseningManager() {};
 
     /** \brief
      * destructor
diff --git a/AMDiS/src/CoarseningManager2d.cc b/AMDiS/src/CoarseningManager2d.cc
index 8893093990b5250df071e620299fa514ae7a41c9..694ef0e22c63693df908239f50352ddbf3d5c60d 100644
--- a/AMDiS/src/CoarseningManager2d.cc
+++ b/AMDiS/src/CoarseningManager2d.cc
@@ -25,7 +25,7 @@ namespace AMDiS {
     child[0] = dynamic_cast<Triangle*>(const_cast<Element*>( el->getChild(0)));
     child[1] = dynamic_cast<Triangle*>(const_cast<Element*>( el->getChild(1))); 
 
-    TEST_EXIT(child[0]->getMark() < 0  &&  child[1]->getMark() < 0)
+    TEST_EXIT_DBG(child[0]->getMark() < 0  &&  child[1]->getMark() < 0)
       ("element %d with children[%d,%d] must not be coarsend!\n",
        el->getIndex(), child[0]->getIndex(), child[1]->getIndex());
   
@@ -202,57 +202,53 @@ namespace AMDiS {
 
   int CoarseningManager2d::coarsenFunction(ElInfo *el_info)
   {
-    Triangle        *el = dynamic_cast<Triangle*>(const_cast<Element*>( el_info->getElement()));
+    Triangle *el = dynamic_cast<Triangle*>(const_cast<Element*>( el_info->getElement()));
     DegreeOfFreedom *edge[2];
-    int             n_neigh, bound = 0;
+    int n_neigh, bound = 0;
     RCNeighbourList coarse_list(2);
 
     coarse_list.setCoarseningManager(this);
 
-    if (el->getMark() >= 0)  return 0; // el must not be coarsend, return
-    if (!(el->getChild(0))) return 0;  // single leaves don't get coarsened
-
-    if (el->getChild(0)->getMark() >= 0  || el->getChild(1)->getMark() >= 0)
-      {
-	/****************************************************************************/
-	/*  one of the children must not be coarsend; return :-(                    */
-	/****************************************************************************/
-	el->setMark(0);
-	return 0;
-      }
+    if (el->getMark() >= 0)
+      return 0; // el must not be coarsend, return
+    if (!(el->getChild(0))) 
+      return 0;  // single leaves don't get coarsened
+
+    if (el->getChild(0)->getMark() >= 0  || el->getChild(1)->getMark() >= 0) {
+      /****************************************************************************/
+      /*  one of the children must not be coarsend; return :-(                    */
+      /****************************************************************************/
+      el->setMark(0);
+      return 0;
+    }
 
-    if (!el->getChild(0)->isLeaf() || !el->getChild(1)->isLeaf())
-      {
-	/****************************************************************************/
-	/*  one of the children is not a leaf element; try again later on           */
-	/****************************************************************************/
-	doMore = true;
-	return 0;
-      }
+    if (!el->getChild(0)->isLeaf() || !el->getChild(1)->isLeaf()) {
+      /****************************************************************************/
+      /*  one of the children is not a leaf element; try again later on           */
+      /****************************************************************************/
+      doMore = true;
+      return 0;
+    }
 
     /****************************************************************************/
     /*  give the refinement edge the right orientation                          */
     /****************************************************************************/
 
-    if (el->getDOF(0,0) < el->getDOF(1,0))
-      {
-	edge[0] = const_cast<int*>( el->getDOF(0));
-	edge[1] = const_cast<int*>( el->getDOF(1));
-      }
-    else
-      {
-	edge[1] = const_cast<int*>( el->getDOF(0));
-	edge[0] = const_cast<int*>( el->getDOF(1));
-      }
+    if (el->getDOF(0,0) < el->getDOF(1,0)) {
+      edge[0] = const_cast<int*>( el->getDOF(0));
+      edge[1] = const_cast<int*>( el->getDOF(1));
+    } else {
+      edge[1] = const_cast<int*>( el->getDOF(0));
+      edge[0] = const_cast<int*>( el->getDOF(1));
+    }
 
     coarse_list.setElement(0, el, true);
 
     n_neigh = 1;
-    if (coarse_list.setElement(1, el_info->getNeighbour(2)))
-      {
-	n_neigh = 2;
-	coarse_list.setCoarsePatch(1, el_info->getOppVertex(2) == 2);
-      }
+    if (coarse_list.setElement(1, el_info->getNeighbour(2))) {
+      n_neigh = 2;
+      coarse_list.setCoarsePatch(1, el_info->getOppVertex(2) == 2);
+    }
   
     /****************************************************************************/
     /*  check wether we can coarsen the patch or not                            */
@@ -262,20 +258,20 @@ namespace AMDiS {
     // === check for periodic boundary ==========================================
     // ==========================================================================
 
-    if(coarse_list.doCoarsePatch(n_neigh)) {
+    if (coarse_list.doCoarsePatch(n_neigh)) {
       int n_neigh_periodic;
 
       DegreeOfFreedom *next_edge[2];
 
       RCNeighbourList *periodicList;
 
-      while(edge[0] != NULL) {
+      while (edge[0] != NULL) {
 	periodicList = coarse_list.periodicSplit(edge, 
 						 next_edge,
 						 &n_neigh,
 						 &n_neigh_periodic);
 
-	TEST_EXIT(periodicList)("periodicList = NULL\n");
+	TEST_EXIT_DBG(periodicList)("periodicList = NULL\n");
 
 	coarsenPatch(periodicList, n_neigh_periodic, bound);
 
diff --git a/AMDiS/src/CoarseningManager3d.cc b/AMDiS/src/CoarseningManager3d.cc
index d85bd42f3d17c6ac3dd888b121a45ec6b5083d7d..80e555bf9b1e93b5bceb5e2704923f98c289ecd6 100644
--- a/AMDiS/src/CoarseningManager3d.cc
+++ b/AMDiS/src/CoarseningManager3d.cc
@@ -49,11 +49,11 @@ namespace AMDiS {
     /****************************************************************************/
 
     if (el->getDOF(0,0) < el->getDOF(1,0)) {
-      edge[0] = const_cast<int*>( el->getDOF(0));
-      edge[1] = const_cast<int*>( el->getDOF(1));
+      edge[0] = const_cast<int*>(el->getDOF(0));
+      edge[1] = const_cast<int*>(el->getDOF(1));
     } else {
-      edge[1] = const_cast<int*>( el->getDOF(0));
-      edge[0] = const_cast<int*>( el->getDOF(1));
+      edge[1] = const_cast<int*>(el->getDOF(0));
+      edge[0] = const_cast<int*>(el->getDOF(1));
     }
 
     coarsenList->setElement(0, el, true);
@@ -72,51 +72,24 @@ namespace AMDiS {
     /*  check wether we can coarsen the patch or not                            */
     /****************************************************************************/
 
-    // // ==========================================================================
-    // // === check for periodic boundary ==========================================
-    // // ==========================================================================
-
-    //   DegreeOfFreedom *periodic_edge[2];
-    //   int n_neigh_periodic;
-
-    //   RCNeighbourList *periodicList = coarsenList->periodicSplit(edge, 
-    // 							     &n_neigh,
-    // 							     periodic_edge,
-    // 							     &n_neigh_periodic);
-
-    //   bool doCoarsening = coarsenList->doCoarsePatch(n_neigh);
-
-    //   if(periodicList && doCoarsening) {
-    //     if (periodicList->doCoarsePatch(n_neigh_periodic)) {
-    //       coarsenPatch(periodicList, n_neigh_periodic, bound);
-    //     } else {
-    //       doCoarsening = false;
-    //     }
-    //     DELETE periodicList;
-    //   }
-
-    //   if (coarsenList->doCoarsePatch(n_neigh)/*doCoarsening*/) {
-    //     coarsenPatch(coarsenList, n_neigh, bound);
-    //   }
-
     // ==========================================================================
     // === check for periodic boundary ==========================================
     // ==========================================================================
 
-    if(coarsenList->doCoarsePatch(n_neigh)) {
+    if (coarsenList->doCoarsePatch(n_neigh)) {
       int n_neigh_periodic;
 
       DegreeOfFreedom *next_edge[2];
 
       RCNeighbourList *periodicList;
 
-      while(edge[0] != NULL) {
+      while (edge[0] != NULL) {
 	periodicList = coarsenList->periodicSplit(edge, 
 						  next_edge,
 						  &n_neigh,
 						  &n_neigh_periodic);
 
-	TEST_EXIT(periodicList)("periodicList = NULL\n");
+	TEST_EXIT_DBG(periodicList)("periodicList = NULL\n");
 
 	coarsenPatch(periodicList, n_neigh_periodic, bound);
 
@@ -255,7 +228,7 @@ namespace AMDiS {
     opp_v = el_info->getOppVertex(3-dir);
 
     neigh_info = stack->traverseNeighbour3d(el_info, 3-dir);
-    TEST_EXIT(neigh == neigh_info->getElement())
+    TEST_EXIT_DBG(neigh == neigh_info->getElement())
       ("neigh %d and neigh_info->el %d are not identical\n", 
        neigh->getIndex(), neigh_info->getElement()->getIndex());
     /****************************************************************************/
@@ -280,7 +253,7 @@ namespace AMDiS {
 	for (k = 0; k < n_vertices; k++)
 	  if (mesh->associated(neigh->getDOF(k, 0), edge[1][0]))  break;
      
-	TEST_EXIT(j < n_vertices  &&  k < n_vertices)
+	TEST_EXIT_DBG(j < n_vertices  &&  k < n_vertices)
 	  ("dof %d or dof %d not found on element %d with nodes (%d %d %d %d)\n", 
 	   edge[0][0], edge[1][0], neigh->getIndex(), neigh->getDOF(0,0),
 	   neigh->getDOF(1,0), neigh->getDOF(2,0), neigh->getDOF(3,0));
@@ -302,7 +275,7 @@ namespace AMDiS {
       opp_v = neigh_info->getOppVertex(i);
       if ((neigh = dynamic_cast<Tetrahedron*>(const_cast<Element*>( neigh_info->getNeighbour(i))))) {
 	neigh_info = stack->traverseNeighbour3d(neigh_info, i);
-	TEST_EXIT(neigh == neigh_info->getElement())
+	TEST_EXIT_DBG(neigh == neigh_info->getElement())
 	  ("neigh %d and neigh_info->el %d are not identical\n", 
 	   neigh->getIndex(), neigh_info->getElement()->getIndex());
 	/****************************************************************************/
@@ -326,7 +299,7 @@ namespace AMDiS {
     i = *n_neigh-1;
     opp_v = coarsenList->getOppVertex(i, 0);
     do {
-      TEST_EXIT(neigh_info->getNeighbour(opp_v)  &&  i > 0)
+      TEST_EXIT_DBG(neigh_info->getNeighbour(opp_v)  &&  i > 0)
 	("while looping back domains boundary was reached or i == 0\n");
       opp_v = coarsenList->getOppVertex(i--, 0);
       neigh_info = stack->traverseNeighbour3d(neigh_info, opp_v);
diff --git a/AMDiS/src/CoarseningManager3d.h b/AMDiS/src/CoarseningManager3d.h
index cb009cd66dbc6eb587becfa7e5e875d2d168ee73..c568615a9779c10863ea39e03856388749e10c52 100644
--- a/AMDiS/src/CoarseningManager3d.h
+++ b/AMDiS/src/CoarseningManager3d.h
@@ -43,10 +43,7 @@ namespace AMDiS {
     /** \brief
      * Calls base class constructor and checks dimension of mesh. 
      */
-    CoarseningManager3d() : CoarseningManager() {
-      //     FUNCNAME("CoarseningManager3d::CoarseningManager3d");
-      //     TEST_EXIT(mesh->getDim()==3)("mesh->dim != 3\n");
-    };
+    CoarseningManager3d() : CoarseningManager() {};
 
     /** \brief
      * destructor
diff --git a/AMDiS/src/ConditionalEstimator.cc b/AMDiS/src/ConditionalEstimator.cc
index 82e8c081bea41662ffa654bb9260b65d27b33af4..4e527aed1d259515ae3596a123e1cb386d616fd3 100644
--- a/AMDiS/src/ConditionalEstimator.cc
+++ b/AMDiS/src/ConditionalEstimator.cc
@@ -26,10 +26,10 @@ namespace AMDiS {
 	PartitionElementData *elData = dynamic_cast<PartitionElementData*>
 	  (elInfo->getElement()->getElementData(PARTITION_ED));
 
-	TEST_EXIT(elInfo->getElement()->isLeaf())("element not leaf\n");
-	TEST_EXIT(elData)("no partitoin data on leaf element %d (rank %d)\n", 
-			  elInfo->getElement()->getIndex(),
-			  MPI::COMM_WORLD.Get_rank());
+	TEST_EXIT_DBG(elInfo->getElement()->isLeaf())("element not leaf\n");
+	TEST_EXIT_DBG(elData)("no partitoin data on leaf element %d (rank %d)\n", 
+			      elInfo->getElement()->getIndex(),
+			      MPI::COMM_WORLD.Get_rank());
 
 	PartitionStatus status = elData->getPartitionStatus();
       
diff --git a/AMDiS/src/ConditionalMarker.h b/AMDiS/src/ConditionalMarker.h
index 64f174a07535cb6a31b4f95879ddebe6e50e2cda..2667a33bb4e1bcc8dd085cdc4a74375e3629c3a1 100644
--- a/AMDiS/src/ConditionalMarker.h
+++ b/AMDiS/src/ConditionalMarker.h
@@ -89,30 +89,22 @@ namespace AMDiS {
 
     void markElement(AdaptInfo *adaptInfo, ElInfo *elInfo) {
       FUNCNAME("ConditionalMarker::markElement()");
-      if(decoratedMarker_) {
+      if (decoratedMarker_) {
 	PartitionElementData *elData = 
 	  dynamic_cast<PartitionElementData*>(elInfo->getElement()->
 					      getElementData(PARTITION_ED));
 
-	TEST_EXIT(elData)("no partition data\n");
+	TEST_EXIT_DBG(elData)("no partition data\n");
 
 	decoratedMarker_->markElement(adaptInfo, elInfo);
 
-	if(elData->getPartitionStatus() == OUT) {
-	  //if(elData->getPartitionStatus() != IN) {
-	  // allow coarsening, forbid refinement
+	if (elData->getPartitionStatus() == OUT) {
 	  Element *element = elInfo->getElement();
-	  if(element->getMark() > 0) {
+	  if (element->getMark() > 0) {
 	    element->setMark(0);
 	  }
 	}
 
-	//     if(elInfo->getElement()->getMark() != 0) {
-	//       MSG("rank %d , index %d, mark %d\n",
-	// 	  MPI::COMM_WORLD.Get_rank(), elInfo->getElement()->getIndex(),
-	// 	  elInfo->getElement()->getMark());
-	//     }
-
 	int minLevel = 
 	  elData->getPartitionStatus() != OUT ? 
 	  localCoarseGridLevel_ :
diff --git a/AMDiS/src/DOFAdmin.cc b/AMDiS/src/DOFAdmin.cc
index 6783cab26dc40d9d1e9c382b369e8890de960ac0..42e33204126987cac476f0e49115deb7aeb6d677 100755
--- a/AMDiS/src/DOFAdmin.cc
+++ b/AMDiS/src/DOFAdmin.cc
@@ -39,22 +39,20 @@ namespace AMDiS {
 
   DOFAdmin& DOFAdmin::operator=(const DOFAdmin& src) 
   {
-    int i;
-
-    if (this!=&src) { 
-      mesh=src.mesh;
-      name=src.name;
-      dofFree=src.dofFree;
-      firstHole=src.firstHole;
-      size=src.size;
-      usedCount=src.usedCount;
-      holeCount=src.holeCount;
-      sizeUsed=src.sizeUsed;
-      for(i=0;i<4;nrDOF[i]=src.nrDOF[i++]) {
-	nr0DOF[i]=src.nr0DOF[i];
+    if (this != &src) { 
+      mesh = src.mesh;
+      name = src.name;
+      dofFree = src.dofFree;
+      firstHole = src.firstHole;
+      size = src.size;
+      usedCount = src.usedCount;
+      holeCount = src.holeCount;
+      sizeUsed = src.sizeUsed;
+      for (int i = 0; i < 4; nrDOF[i] = src.nrDOF[i++]) {
+	nr0DOF[i] = src.nr0DOF[i];
       };
-      dofIndexedList=src.dofIndexedList;
-      dofContainerList=src.dofContainerList;
+      dofIndexedList = src.dofIndexedList;
+      dofContainerList = src.dofContainerList;
     }
     return *this;
   }
@@ -65,8 +63,11 @@ namespace AMDiS {
 
   bool DOFAdmin::operator==(const DOFAdmin& ad) const
   {
-    if (name!=ad.name) return false;
-    if (mesh!=ad.mesh) return false;
+    if (name != ad.name) 
+      return false;
+    if (mesh != ad.mesh) 
+      return false;
+
     return true;
   }
 
@@ -75,10 +76,10 @@ namespace AMDiS {
   {}
 
   void DOFAdmin::freeDOFIndex(int dof) {
-    FUNCNAME("DOFAdmin::freeDOFIndex");
+    FUNCNAME("DOFAdmin::freeDOFIndex()");
 
-    TEST_EXIT(usedCount > 0)("no dofs in use\n");
-    TEST_EXIT((dof >= 0)&&(dof < size))("invalid dof index %d\n",dof);
+    TEST_EXIT_DBG(usedCount > 0)("no dofs in use\n");
+    TEST_EXIT_DBG((dof >= 0) && (dof < size))("invalid dof index %d\n",dof);
 
     ::std::list<DOFIndexedBase*>::iterator di;
     ::std::list<DOFIndexedBase*>::iterator end = dofIndexedList.end();
@@ -107,30 +108,29 @@ namespace AMDiS {
   int DOFAdmin::getDOFIndex()
   {
     FUNCNAME("DOFAdmin::getDOFIndex");
-    int       i, dof = 0;
+    int dof = 0;
 
     // if there is a hole
     if (firstHole < static_cast<int>(dofFree.size())) {
-      TEST_EXIT(dofFree[firstHole])("no hole at firstHole!\n");
+      TEST_EXIT_DBG(dofFree[firstHole])("no hole at firstHole!\n");
       // its no longer a hole
       dofFree[firstHole] = false;
       dof = firstHole;
       // search new hole
       int dfsize = static_cast<int>(dofFree.size());
-      for (i = firstHole+1; i < dfsize; i++) {
+      int i = 0;
+      for (i = firstHole + 1; i < dfsize; i++) {
 	if (dofFree[i]) {
 	  break;
 	}
       }
       firstHole = i;
-    }
-    // if there is no hole
-    else {
+    } else {                    // if there is no hole
       // enlarge dof-list
       enlargeDOFLists(0);
-      TEST_EXIT(firstHole < static_cast<int>(dofFree.size()))
+      TEST_EXIT_DBG(firstHole < static_cast<int>(dofFree.size()))
 	("no free entry after enlargeDOFLists\n");
-      TEST_EXIT(dofFree[firstHole])
+      TEST_EXIT_DBG(dofFree[firstHole])
 	("no free bit at firstHole\n");
       dofFree[firstHole] = false;
       dof = firstHole;
@@ -138,8 +138,9 @@ namespace AMDiS {
     }
 
     usedCount++;
-    if (holeCount > 0) holeCount--;
-    sizeUsed = max(sizeUsed, dof+1);
+    if (holeCount > 0) 
+      holeCount--;
+    sizeUsed = max(sizeUsed, dof + 1);
 
     return(dof);
   }
@@ -180,8 +181,8 @@ namespace AMDiS {
   }
 
   void DOFAdmin::addDOFIndexed(DOFIndexedBase* dofIndexed) {
-    FUNCNAME("DOFAdmin::addDOFIndexed");
-    TEST_EXIT(dofIndexed)("no dofIndexed\n");
+    FUNCNAME("DOFAdmin::addDOFIndexed()");
+    TEST_EXIT_DBG(dofIndexed)("no dofIndexed\n");
 
     if (dofIndexed->getSize() < size) {
       dofIndexed->resize(size);
@@ -209,7 +210,7 @@ namespace AMDiS {
   void DOFAdmin::addDOFContainer(DOFContainer* cont)
   {
     FUNCNAME("DOFAdmin::addDOFContainer()");
-    TEST_EXIT(cont)("no container\n");
+    TEST_EXIT_DBG(cont)("no container\n");
     dofContainerList.push_back(cont);  
   }
 
@@ -233,8 +234,8 @@ namespace AMDiS {
 
   void DOFAdmin::compress(::std::vector<DegreeOfFreedom> &new_dof)
   {
-    FUNCNAME("DOFAdmin::compress");
-    int             i,n,first,last=0;
+    FUNCNAME("DOFAdmin::compress()");
+    int i,n,first,last=0;
 
     // nothing to do ?
     if (size < 1) return;
@@ -258,7 +259,7 @@ namespace AMDiS {
       }
     }
   
-    TEST_EXIT(n == usedCount)("count %d != usedCount %d\n", n, usedCount);
+    TEST_EXIT_DBG(n == usedCount)("count %d != usedCount %d\n", n, usedCount);
   
     // mark used dofs in compressed dofFree
     for(i=0; i < n; i++) {
@@ -303,19 +304,19 @@ namespace AMDiS {
   }
 
   const int DOFAdmin::getNumberOfPreDOFs(int i) const { 
-    TEST_EXIT((0 <= i) && (4 > i))("");
+    TEST_EXIT_DBG((0 <= i) && (4 > i))("");
 
     return nr0DOF[i]; 
   }
 
   void DOFAdmin::setNumberOfDOFs(int i,int v) { 
-    TEST_EXIT((0 <= i) && (4 > i))("");
+    TEST_EXIT_DBG((0 <= i) && (4 > i))("");
 
     nrDOF[i] = v; 
   }
 
   void DOFAdmin::setNumberOfPreDOFs(int i, int v) { 
-    TEST_EXIT((0 <= i) && (4 > i))(""); 
+    TEST_EXIT_DBG((0 <= i) && (4 > i))(""); 
 
     nr0DOF[i] = v; 
   }
diff --git a/AMDiS/src/DOFMatrix.cc b/AMDiS/src/DOFMatrix.cc
index 099fecc29468694bcf08680d666e2f20279c4687..7b8a2a0660c09184e47f3f6ff21623659eead209 100644
--- a/AMDiS/src/DOFMatrix.cc
+++ b/AMDiS/src/DOFMatrix.cc
@@ -318,7 +318,9 @@ namespace AMDiS {
 
     int i, freeCol = -1, rowSize = static_cast<int>( row->size());
 
-    TEST_EXIT(jcol>=0&&jcol<colFESpace->getAdmin()->getUsedSize())("Column index %d out of range 0-%d\n",jcol,colFESpace->getAdmin()->getUsedSize()-1);
+    TEST_EXIT_DBG(jcol >= 0 && 
+		  jcol < colFESpace->getAdmin()->getUsedSize())
+      ("Column index %d out of range 0-%d\n", jcol, colFESpace->getAdmin()->getUsedSize() - 1);
 
     // first entry is diagonal entry
     if(rowFESpace==colFESpace)
@@ -498,21 +500,18 @@ namespace AMDiS {
 
     WARNING("implementation not finished!!!\n");
 
-    int i,j;
-
-    //TEST_EXIT(bTranspose == NoTranspose)("not yet for transposed matrix b");
-
-    TEST_EXIT(a.getColFESpace() == b.getRowFESpace())
+    TEST_EXIT_DBG(a.getColFESpace() == b.getRowFESpace())
       ("a.colFESpace != b.rowFESpace\n");
-    TEST_EXIT(rowFESpace == a.getRowFESpace())
+    TEST_EXIT_DBG(rowFESpace == a.getRowFESpace())
       ("rowFESpace != a.rowFESpace\n");  
-    TEST_EXIT(colFESpace == b.getColFESpace())
+    TEST_EXIT_DBG(colFESpace == b.getColFESpace())
       ("colFESpace != b.colFESpace\n");  
 
     clear();
 
+    int i, j;
 
-    if(aTranspose == NoTranspose && bTranspose == NoTranspose) {
+    if (aTranspose == NoTranspose && bTranspose == NoTranspose) {
       int cols  = b.getColFESpace()->getAdmin()->getUsedSize();
       DOFMatrix::Iterator rowIterator(this, USED_DOFS);
 
@@ -562,40 +561,6 @@ namespace AMDiS {
 	  }
 	}
     } else if(aTranspose == NoTranspose && bTranspose == Transpose) {
-      //     DOFMatrix::Iterator aIterator(&a, USED_DOFS);
-      //     DOFMatrix::Iterator bIterator(&b, USED_DOFS);
-      //     ::std::vector<MatEntry>::const_iterator aRowIt;
-      //     ::std::vector<MatEntry>::const_iterator aRowBegin;
-      //     ::std::vector<MatEntry>::const_iterator aRowEnd;
-      //     ::std::vector<MatEntry>::const_iterator bRowIt;
-      //     ::std::vector<MatEntry>::const_iterator bRowBegin;
-      //     ::std::vector<MatEntry>::const_iterator bRowEnd;
-      //     int row, col;
-
-      //     for(aIterator.reset(); !aIterator.end(); ++aIterator) {
-      //       row = aIterator.getDOFIndex();
-      //       aRowBegin = aIterator->begin();
-      //       aRowEnd = aIterator->end();
-      //       for(bIterator.reset(); !bIterator.end(); ++bIterator) {
-      // 	col = bIterator.getDOFIndex();
-      // 	double *entry = NULL;
-      // 	bRowBegin = bIterator->begin();
-      // 	for(aRowIt = aRowBegin, bRowIt = bRowBegin;
-      // 	    aRowIt != aRowEnd;
-      // 	    ++aRowIt, ++bRowIt)
-      // 	{
-      // 	  TEST_EXIT(aRowIt->col == bRowIt->col)("invalid col\n");
-      // 	  if(aRowIt->col == UNUSED_ENTRY) continue;
-      // 	  if(aRowIt->col == NO_MORE_ENTRIES) break;	  
-      // 	  double val = aRowIt->entry * bRowIt->entry;
-      // 	  if(!entry) 
-      // 	    entry = addSparseDOFEntry(1.0, row, col, 
-      // 				      aRowIt->entry * bRowIt->entry, false);
-      // 	  else
-      // 	    (*entry) += aRowIt->entry * bRowIt->entry;
-      // 	}
-      //       }
-      //     }
       ERROR_EXIT("not yet\n");
     } else if(aTranspose == Transpose && bTranspose == Transpose) {
       ERROR_EXIT("not yet\n");
@@ -606,14 +571,15 @@ namespace AMDiS {
 		       const DOFMatrix& x,
 		       const DOFMatrix& y)
   {
-    FUNCNAME("DOFMatrix::axpy");
-    TEST_EXIT(x.getRowFESpace() == y.getRowFESpace() &&
-	      rowFESpace == x.getRowFESpace())
+    FUNCNAME("DOFMatrix::axpy()");
+
+    TEST_EXIT_DBG(x.getRowFESpace() == y.getRowFESpace() &&
+		  rowFESpace == x.getRowFESpace())
       ("row fe-spaces not equal\n");
-    TEST_EXIT(x.getColFESpace() == y.getColFESpace() &&
-	      colFESpace == x.getColFESpace())
+    TEST_EXIT_DBG(x.getColFESpace() == y.getColFESpace() &&
+		  colFESpace == x.getColFESpace())
       ("col fe-spaces not equal\n");
-
+    
     DOFMatrix::Iterator rowIterator(this, USED_DOFS);
     DOFMatrix::Iterator xIterator(const_cast<DOFMatrix*>(&x), USED_DOFS);
     DOFMatrix::Iterator yIterator(const_cast<DOFMatrix*>(&y), USED_DOFS);
@@ -699,13 +665,13 @@ namespace AMDiS {
     for (int i = 0; i < static_cast<int>(matrix.size()); i++) {    
       int pi = static_cast<int>(static_cast<double>(i) * scalFactor);
 
-      TEST_EXIT((pi >= 0) && (pi < dim))("PI");
+      TEST_EXIT_DBG((pi >= 0) && (pi < dim))("PI");
 
       for (int j = 0; j < static_cast<int>(matrix[i].size()); j++) {
 	
 	int pj = static_cast<int>(static_cast<double>(matrix[i][j].col) * scalFactor);
 
-	TEST_EXIT((pj >= 0) && (pj < dim))("PJ");
+	TEST_EXIT_DBG((pj >= 0) && (pj < dim))("PJ");
 
 	rowPointers[pi][pj] = 0;
       }
diff --git a/AMDiS/src/DOFMatrix.h b/AMDiS/src/DOFMatrix.h
index 5e002e69b9ecadc43a16d30d2897c602e88a22d8..ae0208b8aa27962cb9e9de7a0c57ea060c7aeb80 100644
--- a/AMDiS/src/DOFMatrix.h
+++ b/AMDiS/src/DOFMatrix.h
@@ -447,7 +447,7 @@ namespace AMDiS {
      * Resizes \ref matrix to n rows
      */
     inline void resize(int n) { 
-      TEST_EXIT(n >= 0)("Can't resize DOFMatrix to negative size\n"); 
+      TEST_EXIT_DBG(n >= 0)("Can't resize DOFMatrix to negative size\n"); 
       matrix.resize(n);
     };
 
@@ -455,8 +455,8 @@ namespace AMDiS {
      * Returns \ref matrix[i] which is the i-th row
      */
     inline const ::std::vector<MatEntry>& operator[](int i) const {
-      TEST_EXIT((i >= 0) && (i < (static_cast<int>(matrix.size()))))
-	("Illegal matrix index %d.\n",i); 
+      TEST_EXIT_DBG((i >= 0) && (i < (static_cast<int>(matrix.size()))))
+      	("Illegal matrix index %d.\n",i); 
       return matrix[i];
     };
 
@@ -464,15 +464,15 @@ namespace AMDiS {
      * Returns \ref matrix[i] which is the i-th row
      */
     inline ::std::vector<MatEntry>& operator[](int i) {
-      TEST_EXIT((i >= 0) && (i < (static_cast<int>(matrix.size()))))
-	("Illegal vector index %d.\n", i);
+      TEST_EXIT_DBG((i >= 0) && (i < (static_cast<int>(matrix.size()))))
+      	("Illegal vector index %d.\n", i);
       return matrix[i];
     };
 
     /** \brief
      * Access to \ref matrix[a][b].entry
      */
-    inline double physAcc(DegreeOfFreedom a,DegreeOfFreedom b) const { 
+    inline double physAcc(DegreeOfFreedom a, DegreeOfFreedom b) const { 
       return matrix[a][b].entry; 
     };
 
diff --git a/AMDiS/src/DOFVector.cc b/AMDiS/src/DOFVector.cc
index 7428c46bce7369bc4f5a92bdf5d50f5efb1e7dd5..4b8fca2c0cce261efd8a42c8a154da481c2e95b6 100644
--- a/AMDiS/src/DOFVector.cc
+++ b/AMDiS/src/DOFVector.cc
@@ -94,12 +94,12 @@ namespace AMDiS {
       numNodes += numPositionNodes;
     }
 
-    TEST_EXIT(numNodes == mesh->getNumberOfNodes())
+    TEST_EXIT_DBG(numNodes == mesh->getNumberOfNodes())
       ("invalid number of nodes\n");
 
-    TEST_EXIT(numDOFs == nBasFcts)
+    TEST_EXIT_DBG(numDOFs == nBasFcts)
       ("number of dofs != number of basis functions\n");
-
+    
     for(i = 0; i < numDOFs; i++) {
       bary.push_back(basFcts->getCoords(i));
     }
@@ -232,14 +232,14 @@ namespace AMDiS {
   {
     FUNCNAME("DOFVector<double>::getGrdAtQPs()");
   
-    TEST_EXIT(quad || quadFast)("neither quad nor quadFast defined\n");
+    TEST_EXIT_DBG(quad || quadFast)("neither quad nor quadFast defined\n");
 
-    if(quad && quadFast) {
-      TEST_EXIT(quad == quadFast->getQuadrature())
-	("quad != quadFast->quadrature\n");
+    if (quad && quadFast) {
+      TEST_EXIT_DBG(quad == quadFast->getQuadrature())
+      	("quad != quadFast->quadrature\n");
     }
 
-    TEST_EXIT(!quadFast || quadFast->getBasisFunctions() == feSpace->getBasisFcts())
+    TEST_EXIT_DBG(!quadFast || quadFast->getBasisFunctions() == feSpace->getBasisFcts())
       ("invalid basis functions");
 
     Element *el = elInfo->getElement(); 
@@ -325,14 +325,14 @@ namespace AMDiS {
   {
     FUNCNAME("DOFVector<double>::getD2AtQPs()");
   
-    TEST_EXIT(quad || quadFast)("neither quad nor quadFast defined\n");
+    TEST_EXIT_DBG(quad || quadFast)("neither quad nor quadFast defined\n");
 
-    if(quad && quadFast) {
-      TEST_EXIT(quad == quadFast->getQuadrature())
-	("quad != quadFast->quadrature\n");
+    if (quad && quadFast) {
+      TEST_EXIT_DBG(quad == quadFast->getQuadrature())
+      	("quad != quadFast->quadrature\n");
     }
 
-    TEST_EXIT(!quadFast || quadFast->getBasisFunctions() == feSpace->getBasisFcts())
+    TEST_EXIT_DBG(!quadFast || quadFast->getBasisFunctions() == feSpace->getBasisFcts())
       ("invalid basis functions");
 
     Element *el = elInfo->getElement(); 
@@ -623,12 +623,12 @@ namespace AMDiS {
       numNodes += numPositionNodes;
     }
 
-    TEST_EXIT(numNodes == mesh->getNumberOfNodes())
+    TEST_EXIT_DBG(numNodes == mesh->getNumberOfNodes())
       ("invalid number of nodes\n");
 
-    TEST_EXIT(numDOFs == nBasFcts)
+    TEST_EXIT_DBG(numDOFs == nBasFcts)
       ("number of dofs != number of basis functions\n");
-
+    
     for (i = 0; i < numDOFs; i++) {
       bary.push_back(basFcts->getCoords(i));
     }
@@ -698,15 +698,14 @@ namespace AMDiS {
   {
     FUNCNAME("transform()");
 
-    TEST_EXIT(vec)("no vector\n");
-
-    int i, j, dow = Global::getGeo(WORLD);
+    TEST_EXIT_DBG(vec)("no vector\n");
 
+    int dow = Global::getGeo(WORLD);
     static WorldVector<DOFVector<double>*> *result = NULL;
 
-    if(!res && !result) {
+    if (!res && !result) {
       result = NEW WorldVector<DOFVector<double>*>;
-      for(i = 0; i < dow; i++) {
+      for (int i = 0; i < dow; i++) {
 	(*result)[i] = NEW DOFVector<double>(vec->getFESpace(), "transform");
       }
     }
@@ -714,8 +713,8 @@ namespace AMDiS {
     WorldVector<DOFVector<double>*> *r = res ? res : result;
 
     int vecSize = vec->getSize();
-    for(i = 0; i < vecSize; i++) {
-      for(j = 0; j < dow; j++) {
+    for (int i = 0; i < vecSize; i++) {
+      for (int j = 0; j < dow; j++) {
 	(*((*r)[j]))[i] = (*vec)[i][j];
       }
     }
diff --git a/AMDiS/src/DOFVector.h b/AMDiS/src/DOFVector.h
index 28b3927ad84c216740a09a276866a4832f80df48..290d14e89c7cb3af3dbd864f1d41fd049ab7eab4 100644
--- a/AMDiS/src/DOFVector.h
+++ b/AMDiS/src/DOFVector.h
@@ -402,8 +402,8 @@ namespace AMDiS {
      * Resizes \ref vec to n
      */
     inline void resize(int n) { 
-      FUNCNAME("DOFVector<T>::resize");
-      TEST_EXIT((n>=0))("Can't resize DOFVector to negative size\n"); 
+      FUNCNAME("DOFVector<T>::resize()");
+      TEST_EXIT_DBG((n >= 0))("Can't resize DOFVector to negative size\n"); 
       vec.resize(n);
     }; 
 
@@ -411,8 +411,8 @@ namespace AMDiS {
      * Resizes \ref vec to n and inits new values with init
      */
     inline void resize(int n, T init) { 
-      FUNCNAME("DOFVector<T>::resize");
-      TEST_EXIT((n>=0))("Can't resize DOFVector to negative size\n"); 
+      FUNCNAME("DOFVector<T>::resize()");
+      TEST_EXIT_DBG((n >= 0))("Can't resize DOFVector to negative size\n"); 
       vec.resize(n, init);
     }; 
 
@@ -421,7 +421,8 @@ namespace AMDiS {
      */
     inline const T& operator[](DegreeOfFreedom i) const {
       FUNCNAME("DOFVector<T>::operator[]");
-      TEST_EXIT((i>=0)&&(i<static_cast<int>(vec.size())))("Illegal vector index %d.\n",i);
+      TEST_EXIT_DBG((i>= 0) && (i < static_cast<int>(vec.size())))
+	("Illegal vector index %d.\n",i);
       return vec[i];
     }; 
 
@@ -434,7 +435,8 @@ namespace AMDiS {
      */
     inline T& operator[](DegreeOfFreedom i) {
       FUNCNAME("DOFVector<T>::operator[]");
-      TEST_EXIT((i>=0)&&(i<static_cast<int>(vec.size())))("Illegal vector index %d.\n",i);
+      TEST_EXIT_DBG((i >= 0) && (i < static_cast<int>(vec.size())))
+	("Illegal vector index %d.\n",i);
       return vec[i];
     };
 
diff --git a/AMDiS/src/DOFVector.hh b/AMDiS/src/DOFVector.hh
index 78624c2b856326facea6599b998cacb042e6aa0b..1758edb21ef7bd1b1f8c10f6bc081c32576af104 100644
--- a/AMDiS/src/DOFVector.hh
+++ b/AMDiS/src/DOFVector.hh
@@ -16,9 +16,6 @@
 
 namespace AMDiS {
 
-  // template<typename T>
-  // void DOFVector<T>::coarseRestrict(RCNeighbourList& list, int n) {}
-
   template<typename T>
   void DOFVectorBase<T>::addElementVector(T factor, 
 					  const ElementVector &elVec, 
@@ -44,7 +41,6 @@ namespace AMDiS {
   template<typename T>
   DOFVector<T>::DOFVector(const FiniteElemSpace* f,::std::string n)
     : DOFVectorBase<T>(f, n),
-      //elementVector(NULL), 
       refineInter(false), 
       coarsenOperation(NO_OPERATION)
   {
@@ -90,17 +86,14 @@ namespace AMDiS {
   double DOFVector<T>::nrm2() const
   {
     FUNCNAME("DOFVector<T>::nrm2()");
-    double nrm;
-    const DOFAdmin *admin = NULL;
 
-    TEST_EXIT(feSpace && (admin = feSpace->getAdmin()))
-      ("pointer is NULL: %8X, %8X\n", feSpace,admin);
-    TEST_EXIT(static_cast<int>(vec.size()) >= admin->getUsedSize())
+    TEST_EXIT_DBG(feSpace)("feSpace is NULL\n");
+    TEST_EXIT_DBG(feSpace->getAdmin())("admin is NULL\n");
+    TEST_EXIT_DBG(static_cast<int>(vec.size()) >= feSpace->getAdmin()->getUsedSize())
       ("size = %d too small: admin->sizeUsed = %d\n", vec.size(),
-       admin->getUsedSize());
-
-    nrm = 0.0;
-
+       feSpace->getAdmin()->getUsedSize());
+    
+    double nrm = 0.0;
     Iterator vecIterator(dynamic_cast<DOFIndexed<T>*>(const_cast<DOFVector<T>*>(this)), USED_DOFS);
     for(vecIterator.reset(); !vecIterator.end(); ++vecIterator)
       nrm += (*vecIterator) * (*vecIterator);
@@ -112,17 +105,14 @@ namespace AMDiS {
   double DOFVector<T>::squareNrm2() const
   {
     FUNCNAME("DOFVector<T>::nrm2()");
-    double nrm;
-    const DOFAdmin *admin = NULL;
 
-    TEST_EXIT(feSpace && (admin = feSpace->getAdmin()))
-      ("pointer is NULL: %8X, %8X\n", feSpace,admin);
-    TEST_EXIT(static_cast<int>(vec.size()) >= admin->getUsedSize())
+    TEST_EXIT_DBG(feSpace)("feSpace is NULL\n");
+    TEST_EXIT_DBG(feSpace->getAdmin())("admin is NULL\n");
+    TEST_EXIT_DBG(static_cast<int>(vec.size()) >= feSpace->getAdmin()->getUsedSize())
       ("size = %d too small: admin->sizeUsed = %d\n", vec.size(),
-       admin->getUsedSize());
-
-    nrm = 0.0;
-
+       feSpace->getAdmin()->getUsedSize());
+    
+    double nrm = 0.0;
     Iterator vecIterator(dynamic_cast<DOFIndexed<T>*>(const_cast<DOFVector<T>*>(this)), USED_DOFS);
     for(vecIterator.reset(); !vecIterator.end(); ++vecIterator)
       nrm += (*vecIterator) * (*vecIterator);
@@ -133,17 +123,15 @@ namespace AMDiS {
   template<typename T>
   T DOFVector<T>::asum() const
   {
-    FUNCNAME("DOFVector<T>::asum");
-    double    nrm;
-    const DOFAdmin *admin = NULL;
-    TEST_EXIT(feSpace && (admin = feSpace->getAdmin()))
-      ("pointer is NULL: %8X, %8X\n", feSpace, admin);
-    TEST_EXIT(vec.size() >= admin->getUsedSize())
-      ("size = %d too small: admin->sizeUsed = %d\n", vec.size(), 
-       admin->getUsedSize());
+    FUNCNAME("DOFVector<T>::asum()");
 
-    nrm = 0.0;
+    TEST_EXIT_DBG(feSpace)("feSpace is NULL\n");
+    TEST_EXIT_DBG(feSpace->getAdmin())("admin is NULL\n");
+    TEST_EXIT_DBG(static_cast<int>(vec.size()) >= feSpace->getAdmin()->getUsedSize())
+      ("size = %d too small: admin->sizeUsed = %d\n", vec.size(),
+       feSpace->getAdmin()->getUsedSize());
 
+    double nrm = 0.0;
     Iterator vecIterator(dynamic_cast<DOFIndexed<T>*>(const_cast<DOFVector<T>*>(this)), USED_DOFS);
     for(vecIterator.reset(); !vecIterator.end(); ++vecIterator)
       nrm += abs(*vecIterator);
@@ -151,22 +139,18 @@ namespace AMDiS {
     return(nrm);
   }
 
-  // Andreas ergaenzte ..
-
   template<typename T>
   T DOFVector<T>::sum() const
   {
-    FUNCNAME("DOFVector<T>::sum");
-    double    nrm;
-    const DOFAdmin *admin = NULL;
-    TEST_EXIT(feSpace && (admin = feSpace->getAdmin()))
-      ("pointer is NULL: %8X, %8X\n", feSpace, admin);
-    TEST_EXIT(vec.size() >= admin->getUsedSize())
-      ("size = %d too small: admin->sizeUsed = %d\n", vec.size(), 
-       admin->getUsedSize());
+    FUNCNAME("DOFVector<T>::sum()");
 
-    nrm = 0.0;
+    TEST_EXIT_DBG(feSpace)("feSpace is NULL\n");
+    TEST_EXIT_DBG(feSpace->getAdmin())("admin is NULL\n");
+    TEST_EXIT_DBG(static_cast<int>(vec.size()) >= feSpace->getAdmin()->getUsedSize())
+      ("size = %d too small: admin->sizeUsed = %d\n", vec.size(),
+       feSpace->getAdmin()->getUsedSize());
 
+    double nrm = 0.0;    
     Iterator vecIterator(dynamic_cast<DOFIndexed<T>*>(const_cast<DOFVector<T>*>(this)), USED_DOFS);
     for(vecIterator.reset(); !vecIterator.end(); ++vecIterator)
       nrm += *vecIterator;
@@ -174,205 +158,89 @@ namespace AMDiS {
     return(nrm);
   }
 
-  // .. bis hier (Andreas)
-
-
   template<typename T>
   void DOFVector<T>::set(T alpha)
   {
-    FUNCNAME("DOFVector<T>::set");
-    const DOFAdmin *admin = NULL;
+    FUNCNAME("DOFVector<T>::set()");
 
-    TEST_EXIT(feSpace && (admin = feSpace->getAdmin()))
-      ("pointer is NULL: %8X, %8X\n", feSpace, admin);
-    TEST_EXIT(static_cast<int>( vec.size()) >= admin->getUsedSize())
+    TEST_EXIT_DBG(feSpace)("feSpace is NULL\n");
+    TEST_EXIT_DBG(feSpace->getAdmin())("admin is NULL\n");
+    TEST_EXIT_DBG(static_cast<int>(vec.size()) >= feSpace->getAdmin()->getUsedSize())
       ("size = %d too small: admin->sizeUsed = %d\n", vec.size(),
-       admin->getUsedSize());
-
+       feSpace->getAdmin()->getUsedSize());
+    
     Iterator vecIterator(dynamic_cast<DOFIndexed<T>*>(this), USED_DOFS);
     for(vecIterator.reset(); !vecIterator.end(); ++vecIterator) {
       *vecIterator = alpha ; 
     };
   }
 
-  // template<typename T>
-  // void DOFVector<T>::scal(T alpha)
-  // {
-  //   FUNCNAME("DOFVector<T>::scal");
-  //   const DOFAdmin *admin = NULL;
-
-  //   TEST_EXIT( feSpace && (admin = feSpace->getAdmin()))
-  //     ("pointer is NULL: %8X, %8X\n", this, admin);
-  //   TEST_EXIT(static_cast<int>(vec.size()) >= admin->getUsedSize())
-  //     ("size = %d too small: admin->sizeUsed = %d\n", vec.size(), 
-  //      admin->getUsedSize());
-
-  //   Iterator vecIterator((DOFIndexed<T>*) this, USED_DOFS);
-  //   for(vecIterator.reset(); !vecIterator.end(); ++vecIterator) {
-  //     (*vecIterator) *= alpha ; 
-  //   };
-  // }
-
 
   template<typename T>
   void DOFVector<T>::copy(const DOFVector<T>& x)
   {
-    FUNCNAME("DOFVector<T>::copy");
-    const DOFAdmin *admin = NULL;
-
-    TEST_EXIT(feSpace && x.feSpace)
-      ("feSpace is NULL: %8X, %8X\n", feSpace,x.feSpace);
-    TEST_EXIT((admin = feSpace->getAdmin()) && (admin == x.feSpace->getAdmin()))
+    FUNCNAME("DOFVector<T>::copy()");
+    
+    TEST_EXIT_DBG(feSpace && x.feSpace)
+      ("feSpace is NULL: %8X, %8X\n", feSpace, x.feSpace);
+    TEST_EXIT_DBG(feSpace->getAdmin() && (feSpace->getAdmin() == x.feSpace->getAdmin()))
       ("no admin or different admins: %8X, %8X\n",
        feSpace->getAdmin(), x.feSpace->getAdmin());
-    TEST_EXIT(static_cast<int>(vec.size()) >= admin->getUsedSize())
+    TEST_EXIT_DBG(static_cast<int>(vec.size()) >= feSpace->getAdmin()->getUsedSize())
       ("size = %d too small: admin->sizeUsed = %d\n", vec.size(), 
-       admin->getUsedSize());
-    TEST_EXIT(static_cast<int>(x.vec.size()) >= admin->getUsedSize())
+       feSpace->getAdmin()->getUsedSize());
+    TEST_EXIT_DBG(static_cast<int>(x.vec.size()) >= feSpace->getAdmin()->getUsedSize())
       ("x.size = %d too small: admin->sizeUsed = %d\n", x.vec.size(), 
-       admin->getUsedSize());
-
+       feSpace->getAdmin()->getUsedSize());
+    
     Iterator vecIterator(dynamic_cast<DOFIndexed<T>*>(this), USED_DOFS);
     Iterator xIterator(dynamic_cast<DOFVector<T>*>(const_cast<DOFVector<T>*>(&x)), USED_DOFS);
-    for(vecIterator.reset(), xIterator.reset();
-	!vecIterator.end();
-	++vecIterator, ++xIterator) 
-      {  
-	*vecIterator = *xIterator; 
-      };
+    for (vecIterator.reset(), xIterator.reset();
+	 !vecIterator.end();
+	 ++vecIterator, ++xIterator) {
+      
+      *vecIterator = *xIterator; 
+    };
   }
 
-  // template<typename T>
-  // void DOFVector<T>::axpy(T alpha, const DOFVector<T>& x)
-  // {
-  //   FUNCNAME("DOFVector<T>::axpy");
-  //   const DOFAdmin *admin;
-
-  //   TEST_EXIT(feSpace && x.feSpace)
-  //     ("feSpace is NULL: %8X, %8X\n", feSpace,x.feSpace);
-  //   TEST_EXIT((admin = feSpace->getAdmin()) && (admin == x.feSpace->getAdmin()))
-  //     ("no admin or different admins: %8X, %8X\n",
-  //      feSpace->getAdmin(), x.feSpace->getAdmin());
-  //   TEST_EXIT(static_cast<int>(vec.size()) >= admin->getUsedSize())
-  //     ("size = %d too small: admin->size = %d\n", vec.size(), 
-  //      admin->getUsedSize());
-  //   TEST_EXIT(static_cast<int>(x.vec.size()) >= admin->getUsedSize())
-  //     ("x.size = %d too small: admin->size = %d\n", x.vec.size(), 
-  //      admin->getUsedSize());
-
-  //   Iterator vecIterator((DOFIndexed<T>*) this, USED_DOFS);
-  //   Iterator xIterator((DOFIndexed<T>*) &x, USED_DOFS);
-  //   for(vecIterator.reset(), xIterator.reset();
-  //       !vecIterator.end();
-  //       ++vecIterator, ++xIterator) 
-  //   {  
-  //     *vecIterator += alpha * (*xIterator); 
-  //   };
-  // }
-
-  // template<typename T>
-  // void DOFVector<T>::axpy(T alpha, 
-  // 			const DOFVector<T>& x, 
-  // 			const DOFVector<T>& y)
-  // {
-  //   FUNCNAME("DOFVector<T>::axpy");
-  //   const DOFAdmin *admin;
-
-  //   TEST_EXIT(feSpace && x.feSpace && y.feSpace)
-  //     ("feSpace is NULL: %8X, %8X, %8X\n", feSpace, x.feSpace, y.feSpace);
-  //   TEST_EXIT((admin = feSpace->getAdmin()) && 
-  // 	    (admin == x.feSpace->getAdmin()) &&
-  // 	    (admin == y.feSpace->getAdmin()))
-  //     ("no admin or different admins: %8X, %8X, %8X\n",
-  //      feSpace->getAdmin(), x.feSpace->getAdmin(), y.feSpace->getAdmin());
-  //   TEST_EXIT(static_cast<int>(vec.size()) >= admin->getUsedSize())
-  //     ("size = %d too small: admin->size = %d\n", vec.size(), 
-  //      admin->getUsedSize());
-  //   TEST_EXIT(static_cast<int>(x.vec.size()) >= admin->getUsedSize())
-  //     ("x.size = %d too small: admin->size = %d\n", x.vec.size(), 
-  //      admin->getUsedSize());
-  //   TEST_EXIT(static_cast<int>(y.vec.size()) >= admin->getUsedSize())
-  //     ("y.size = %d too small: admin->size = %d\n", y.vec.size(), 
-  //      admin->getUsedSize());
-
-  //   Iterator vecIterator((DOFIndexed<T>*) this, USED_DOFS);
-  //   Iterator xIterator((DOFIndexed<T>*) &x, USED_DOFS);
-  //   Iterator yIterator((DOFIndexed<T>*) &y, USED_DOFS);
-  //   for(vecIterator.reset(), xIterator.reset(), yIterator.reset();
-  //       !vecIterator.end();
-  //       ++vecIterator, ++xIterator, ++yIterator) 
-  //   {  
-  //     *vecIterator = alpha * (*xIterator) + (*yIterator); 
-  //   };
-  // }
-
-  // template<typename T>
-  // void DOFVector<T>::xpay(T alpha, const DOFVector<T>& x)
-  // {
-  //   FUNCNAME("DOFVector<T>::xpay");
-  //   const DOFAdmin *admin;
-
-  //   TEST_EXIT(feSpace && x.feSpace)
-  //     ("feSpace is NULL: %8X, %8X\n", feSpace,x.feSpace);
-  //   TEST_EXIT((admin = feSpace->getAdmin()) && (admin == x.feSpace->getAdmin()))
-  //     ("no admin or different admins: %8X, %8X\n",
-  //      feSpace->getAdmin(), x.feSpace->getAdmin());
-  //   TEST_EXIT(static_cast<int>(vec.size()) >= admin->getUsedSize())
-  //     ("size = %d too small: admin->sizeUsed = %d\n",
-  //      vec.size(), admin->getUsedSize());
-  //   TEST_EXIT(static_cast<int>(x.vec.size()) >= admin->getUsedSize())
-  //     ("x.size = %d too small: admin->sizeUsed = %d\n", 
-  //      x.vec.size(), admin->getUsedSize());
-
-  //   Iterator vecIterator((DOFIndexed<T>*) this, USED_DOFS);
-  //   Iterator xIterator((DOFIndexed<T>*) &x, USED_DOFS);
-  //   for(vecIterator.reset(), xIterator.reset();
-  //       !vecIterator.end();
-  //       ++vecIterator, ++xIterator) 
-  //   {
-  //     *vecIterator = (*xIterator) + alpha * (*vecIterator); 
-  //   };
-  // }
 
   template<typename T>
   T DOFVector<T>::min() const
   {
-    FUNCNAME("DOFVector<T>::min");
-    T m;
-    const DOFAdmin *admin = NULL;
-
-    TEST_EXIT( feSpace && (admin = feSpace->getAdmin()))
-      ("pointer is NULL: %8X, %8X\n", this, admin);
-    TEST_EXIT((static_cast<int>( vec.size())) >= admin->getUsedSize())
+    FUNCNAME("DOFVector<T>::min()");
+    
+    TEST_EXIT_DBG(feSpace && feSpace->getAdmin())
+      ("pointer is NULL: %8X, %8X\n", this, feSpace->getAdmin());
+    TEST_EXIT_DBG((static_cast<int>(vec.size())) >= feSpace->getAdmin()->getUsedSize())
       ("size = %d too small: admin->sizeUsed = %d\n", vec.size(), 
-       admin->getUsedSize());
-  
+       feSpace->getAdmin()->getUsedSize());
+
+    T m;    
     Iterator vecIterator(const_cast<DOFIndexed<T>*>(dynamic_cast<const DOFIndexed<T>*>(this)), USED_DOFS);
-    for(vecIterator.reset(), m = *vecIterator; !vecIterator.end(); ++vecIterator)
-      {
-	m = ::std::min(m, *vecIterator);
-      }
+    for (vecIterator.reset(), m = *vecIterator; !vecIterator.end(); ++vecIterator) {
+      m = ::std::min(m, *vecIterator);
+    }
+
     return m;
   }
 
   template<typename T>
   T DOFVector<T>::max() const 
   {
-    FUNCNAME("DOFVector<T>::max");
-    T m;
-    const DOFAdmin *admin = NULL;
-
-    TEST_EXIT( feSpace && (admin = feSpace->getAdmin()))
-      ("pointer is NULL: %8X, %8X\n", this, admin);
-    TEST_EXIT((static_cast<int>( vec.size())) >= admin->getUsedSize())
+    FUNCNAME("DOFVector<T>::max()");
+    
+    TEST_EXIT_DBG(feSpace && feSpace->getAdmin())
+      ("pointer is NULL: %8X, %8X\n", this, feSpace->getAdmin());
+    TEST_EXIT_DBG((static_cast<int>(vec.size())) >= feSpace->getAdmin()->getUsedSize())
       ("size = %d too small: admin->sizeUsed = %d\n", vec.size(), 
-       admin->getUsedSize());
+       feSpace->getAdmin()->getUsedSize());
 
+    T m;    
     Iterator vecIterator(const_cast<DOFIndexed<T>*>(dynamic_cast<const DOFIndexed<T>*>(this)), USED_DOFS);
-    for(vecIterator.reset(), m = *vecIterator; !vecIterator.end(); ++vecIterator)
-      {
-	m = ::std::max(m, *vecIterator);
-      }
+    for (vecIterator.reset(), m = *vecIterator; !vecIterator.end(); ++vecIterator) {
+      m = ::std::max(m, *vecIterator);
+    }
+
     return m;
   }
 
@@ -381,45 +249,51 @@ namespace AMDiS {
 	    const DOFMatrix& a, const DOFVector<T>& x,
 	    T beta, DOFVector<T>& y)
   {
-    FUNCNAME("gemv");
-    int        j, jcol, ysize;
-    T          sum, ax;
+    FUNCNAME("DOFVector<T>::gemv()");
+
+    int j, jcol, ysize;
+    T sum, ax;
     const DOFMatrix::MatrixRow *row;
-    const DOFAdmin *cadmin,*radmin;
-
-    TEST_EXIT(a.getRowFESpace() && a.getColFESpace() && x.getFESpace() && y.getFESpace())
-      ("feSpace is NULL: %8X, %8X, %8X, %8X\n", a.getRowFESpace(),a.getColFESpace(),x.getFESpace(),y.getFESpace());
-    TEST_EXIT((radmin=a.getRowFESpace()->getAdmin()) && 
-	      (cadmin = a.getColFESpace()->getAdmin()) && 
-	      (((transpose == NoTranspose) && (cadmin == x.getFESpace()->getAdmin()) && 
-		(radmin == y.getFESpace()->getAdmin()))||
-	       ((transpose == Transpose) && (radmin == x.getFESpace()->getAdmin()) && 
-		(cadmin == y.getFESpace()->getAdmin()))))
+    
+    TEST_EXIT_DBG(a.getRowFESpace() && 
+		  a.getColFESpace() && 
+		  x.getFESpace() && 
+		  y.getFESpace())
+      ("feSpace is NULL: %8X, %8X, %8X, %8X\n", 
+       a.getRowFESpace(), a.getColFESpace(), x.getFESpace(), y.getFESpace());
+    TEST_EXIT_DBG(a.getRowFESpace()->getAdmin() && 
+		  a.getColFESpace()->getAdmin() && 
+		  (((transpose == NoTranspose) && 
+		    (a.getColFESpace()->getAdmin() == x.getFESpace()->getAdmin()) && 
+		    (a.getRowFESpace()->getAdmin() == y.getFESpace()->getAdmin()))||
+		   ((transpose == Transpose) && 
+		    (a.getRowFESpace()->getAdmin() == x.getFESpace()->getAdmin()) && 
+		    (a.getColFESpace()->getAdmin() == y.getFESpace()->getAdmin()))))
       ("no admin or different admins: %8X, %8X, %8X, %8X\n",
        a.getRowFESpace()->getAdmin(), a.getColFESpace()->getAdmin(), 
        x.getFESpace()->getAdmin(), y.getFESpace()->getAdmin());
-  
+    
     if (transpose == NoTranspose) {
-      TEST_EXIT(static_cast<int>(x.getSize()) >= cadmin->getUsedSize())
+      TEST_EXIT_DBG(static_cast<int>(x.getSize()) >= a.getColFESpace()->getAdmin()->getUsedSize())
 	("x.size = %d too small: admin->sizeUsed = %d\n",
-	 x.getSize(), cadmin->getUsedSize());
-      TEST_EXIT(static_cast<int>(y.getSize()) >= radmin->getUsedSize())
+	 x.getSize(), a.getColFESpace()->getAdmin()->getUsedSize());
+      TEST_EXIT_DBG(static_cast<int>(y.getSize()) >= a.getRowFESpace()->getAdmin()->getUsedSize())
 	("y.size = %d too small: admin->sizeUsed = %d\n",
-	 y.getSize(), radmin->getUsedSize());
-      TEST_EXIT(static_cast<int>( a.getSize()) >= radmin->getUsedSize())
+	 y.getSize(), a.getRowFESpace()->getAdmin()->getUsedSize());
+      TEST_EXIT_DBG(static_cast<int>( a.getSize()) >= a.getRowFESpace()->getAdmin()->getUsedSize())
 	("a.size = %d too small: admin->sizeUsed = %d\n",
-	 a.getSize(), radmin->getUsedSize());
+	a.getSize(), a.getRowFESpace()->getAdmin()->getUsedSize());
     }
     else  if (transpose == Transpose) {
-      TEST_EXIT(static_cast<int>(x.getSize()) >= radmin->getUsedSize())
+      TEST_EXIT_DBG(static_cast<int>(x.getSize()) >= a.getRowFESpace()->getAdmin()->getUsedSize())
 	("x.size = %d too small: admin->sizeUsed = %d\n",
-	 x.getSize(), radmin->getUsedSize());
-      TEST_EXIT(static_cast<int>(y.getSize()) >= cadmin->getUsedSize())
+	 x.getSize(), a.getRowFESpace()->getAdmin()->getUsedSize());
+      TEST_EXIT_DBG(static_cast<int>(y.getSize()) >= a.getColFESpace()->getAdmin()->getUsedSize())
 	("y.size = %d too small: admin->sizeUsed = %d\n",
-	 y.getSize(), cadmin->getUsedSize());
-      TEST_EXIT(static_cast<int>( a.getSize()) >= radmin->getUsedSize())
+	 y.getSize(), a.getColFESpace()->getAdmin()->getUsedSize());
+      TEST_EXIT_DBG(static_cast<int>( a.getSize()) >= a.getRowFESpace()->getAdmin()->getUsedSize())
 	("a.size = %d too small: admin->sizeUsed = %d\n",
-	 a.getSize(), radmin->getUsedSize());
+	a.getSize(), a.getRowFESpace()->getAdmin()->getUsedSize());
     }
 
     ysize = y.getSize();
@@ -483,99 +357,6 @@ namespace AMDiS {
     }
   }
 
-
-  // /****************************************************************************/
-
-  // template<typename T>
-  // void DOFVector<T>::mv(MatrixTranspose transpose,
-  // 		      const DOFMatrix&a, const DOFVector<T>&x)
-  // {
-  //   FUNCNAME("DOFVector<T>::mv");
-  //   int            jcol;
-  //   T              sum, ax;
-  //   const DOFAdmin *radmin,*cadmin = NULL;
-
-  //   TEST_EXIT(a.getRowFESpace() && a.getColFESpace() && x.feSpace && feSpace)
-  //     ("feSpace is NULL: %8X, %8X, %8X, %8X\n", 
-  //      a.getRowFESpace(), a.getColFESpace(), x.feSpace,feSpace);
-  //   TEST_EXIT((radmin=a.getRowFESpace()->getAdmin()) && 
-  // 	    (cadmin = a.getColFESpace()->getAdmin()) && 
-  // 	    (((transpose == NoTranspose) && (cadmin == x.feSpace->getAdmin()) && 
-  // 	    (radmin == feSpace->getAdmin()))||
-  // 	     ((transpose == Transpose) && (radmin == x.feSpace->getAdmin()) && 
-  // 	      (cadmin == feSpace->getAdmin()))))
-  //     ("no admin or different admins: %8X, %8X, %8X, %8X\n",
-  //      a.getRowFESpace()->getAdmin(), a.getColFESpace()->getAdmin(), 
-  //      x.feSpace->getAdmin(), feSpace->getAdmin());
-
-  //   if (transpose == NoTranspose) {
-  //     TEST_EXIT(static_cast<int>(x.vec.size()) >= cadmin->getUsedSize())
-  //       ("x.size = %d too small: admin->sizeUsed = %d\n",
-  //        x.vec.size(), cadmin->getUsedSize());
-  //     TEST_EXIT(static_cast<int>(vec.size()) >= radmin->getUsedSize())
-  //       ("size = %d too small: admin->sizeUsed = %d\n",
-  //        vec.size(), radmin->getUsedSize());
-  //     TEST_EXIT(static_cast<int>( a.getSize()) >= radmin->getUsedSize())
-  //       ("a.size = %d too small: admin->sizeUsed = %d\n",
-  //        a.getSize(), radmin->getUsedSize());
-
-  //     Iterator vecIterator((DOFIndexed<T>*) this, USED_DOFS); 
-  //     DOFMatrix::Iterator rowIterator((DOFMatrix*) &a, USED_DOFS);
-  //     for(vecIterator.reset(), rowIterator.reset();
-  // 	!rowIterator.end();
-  // 	++rowIterator, ++vecIterator) { 
-  //       sum = 0;
-  //       for(::std::vector<MatEntry>::iterator colIterator = rowIterator->begin();
-  // 	  colIterator != rowIterator->end();
-  // 	  colIterator++) {
-  // 	jcol = colIterator->col;
-  // 	if (jcol >= 0) { // entry used? 
-  // 	  sum += ((T) colIterator->entry) * x[jcol];
-  // 	} else {
-  // 	  if (jcol == DOFMatrix::NO_MORE_ENTRIES)
-  // 	    break;
-  // 	}
-  //       }
-  //       *vecIterator = sum;
-  //     }
-  //   } else if (transpose == Transpose) {
-  //     TEST_EXIT(static_cast<int>(x.vec.size()) >= radmin->getUsedSize())
-  //       ("x.size = %d too small: admin->sizeUsed = %d\n",
-  //        x.vec.size(), radmin->getUsedSize());
-  //     TEST_EXIT(static_cast<int>(vec.size()) >= cadmin->getUsedSize())
-  //       ("size = %d too small: admin->sizeUsed = %d\n",
-  //        vec.size(), cadmin->getUsedSize());
-  //     TEST_EXIT(static_cast<int>( a.getSize()) >= radmin->getUsedSize())
-  //       ("a.size = %d too small: admin->sizeUsed = %d\n",
-  //        a.getSize(), radmin->getUsedSize());
-
-  //     Iterator vecIterator((DOFIndexed<T>*) this, USED_DOFS);
-  //     for(vecIterator.reset();
-  // 	!vecIterator.end(); ++vecIterator) {
-  //       *vecIterator = 0; 
-  //     };
-
-  //     Iterator xIterator((DOFIndexed<T>*) &x, USED_DOFS);
-  //     DOFMatrix::Iterator rowIterator((DOFMatrix*) &a, USED_DOFS);
-  //     for(xIterator.reset(), rowIterator.reset();
-  // 	!rowIterator.end();
-  // 	++rowIterator, ++xIterator) { 
-  //       ax = (*xIterator);
-  //       for(::std::vector<MatEntry>::iterator colIterator = rowIterator->begin();
-  // 	  colIterator != rowIterator->end();
-  // 	  colIterator++) {
-  // 	jcol = colIterator->col;
-  // 	if (jcol >= 0) // entry used?
-  // 	  vec[jcol] += ax * ((T) colIterator->entry);
-  // 	else 
-  // 	  if (jcol == DOFMatrix::NO_MORE_ENTRIES) break;
-  //       }
-  //     }
-  //   } else {
-  //     ERROR_EXIT("transpose=%d\n", transpose);
-  //   }
-  // }
-
   template<typename T>
   void DOFVector<T>::print() const
   {
@@ -649,7 +430,9 @@ namespace AMDiS {
   {
     FUNCNAME("DOFVector<T>::interpol()");
 
-    TEST_EXIT(interFct = fct)("no function to interpolate\n");
+    TEST_EXIT_DBG(fct)("no function to interpolate\n");
+
+    interFct = fct;
 
     if (!this->getFESpace()) {
       MSG("no dof admin in vec %s, skipping interpolation\n",
@@ -967,24 +750,11 @@ namespace AMDiS {
   {
     FUNCNAME("DOFVector::assemble");
 
-    //TEST_EXIT(op || operators.size())("no rhs operator\n");
-    if(!(op || this->operators.size())) return NULL;
+    if (!(op || this->operators.size())) 
+      return NULL;
 
     Operator *operat = op ? op : this->operators[0];
 
-    //   const DegreeOfFreedom *rowDOF;
-    //   const Element         *el = elInfo->getElement();
-  
-    //   const BasisFunction *psi = operat->getRowFESpace()->getBasisFcts();
-
-    //   DOFAdmin *rowAdmin = operat->getRowFESpace()->getAdmin();
-
-    //   int nRow = psi->getNumber();
-
-    //  if(!elementVector) elementVector = operat->createElementVector();
-
-    //  operat->resetElementVector(elementVector);
-
     this->elementVector = 
       operat->getAssembler()->initElementVector(this->elementVector, elInfo);
 
@@ -1003,8 +773,6 @@ namespace AMDiS {
 	}
     }
 
-    //   rowDOF = psi->getLocalIndices(el, rowAdmin, NULL);
-
     addElementVector(factor,
 		     *this->elementVector, 
 		     bound);
@@ -1047,16 +815,16 @@ namespace AMDiS {
   template<typename T>
   const DOFVector<T>& operator*=(DOFVector<T>& x, T scal)
   {
-    FUNCNAME("operator*=(DOFVector<T>& x, T scal)");
-    const DOFAdmin *admin = NULL;
+    FUNCNAME("DOFVector<T>::operator*=(DOFVector<T>& x, T scal)");
 
-    TEST_EXIT( x.getFESpace() && (admin = x.getFESpace()->getAdmin()))
-      ("pointer is NULL: %8X, %8X\n", x.getFESpace(), admin);
+    TEST_EXIT_DBG(x.getFESpace() && x.getFESpace()->getAdmin())
+      ("pointer is NULL: %8X, %8X\n", x.getFESpace(), x.getFESpace()->getAdmin());
 
     typename DOFVector<T>::Iterator vecIterator(dynamic_cast<DOFIndexed<T>*>(&x), USED_DOFS);
-    for(vecIterator.reset(); !vecIterator.end(); ++vecIterator) {
+    for (vecIterator.reset(); !vecIterator.end(); ++vecIterator) {
       (*vecIterator) *= scal; 
     };
+
     return x;
   }
 
@@ -1064,109 +832,95 @@ namespace AMDiS {
   template<typename T>
   const DOFVector<T>& operator+=(DOFVector<T>& x, const DOFVector<T>& y)
   {
-    FUNCNAME("operator*=(DOFVector<T>& x, const DOFVector<T>& y)");
-    const DOFAdmin *admin;
-
-    TEST_EXIT(x.getFESpace() && y.getFESpace())
+    FUNCNAME("DOFVector<T>::operator+=(DOFVector<T>& x, const DOFVector<T>& y)");
+    
+    TEST_EXIT_DBG(x.getFESpace() && y.getFESpace())
       ("feSpace is NULL: %8X, %8X\n", x.getFESpace(), y.getFESpace());
-    TEST_EXIT((admin = x.getFESpace()->getAdmin()) &&
-	      (admin == y.getFESpace()->getAdmin()))
+    TEST_EXIT_DBG(x.getFESpace()->getAdmin() &&
+	      (x.getFESpace()->getAdmin() == y.getFESpace()->getAdmin()))
       ("no admin or different admins: %8X, %8X\n",
        x.getFESpace()->getAdmin(), y.getFESpace()->getAdmin());
-    TEST_EXIT(x.getSize() == y.getSize())("different sizes\n");
-
+    TEST_EXIT_DBG(x.getSize() == y.getSize())("different sizes\n");
+    
     typename DOFVector<T>::Iterator xIterator(dynamic_cast<DOFIndexed<T>*>(&x), USED_DOFS);
     typename DOFVector<T>::Iterator yIterator(dynamic_cast<DOFIndexed<T>*>(const_cast<DOFVector<T>*>(&y)), USED_DOFS);
-    for(xIterator.reset(), yIterator.reset();
-	!xIterator.end();
-	++xIterator, ++yIterator) 
-      {  
-	*xIterator += *yIterator; 
-      }
+    for (xIterator.reset(), yIterator.reset();
+	 !xIterator.end();
+	 ++xIterator, ++yIterator) {     
+      *xIterator += *yIterator; 
+    }
+
     return x;
   }
 
-  // F.H. 17/3/2006
   template<typename T>
   const DOFVector<T>& operator-=(DOFVector<T>& x, const DOFVector<T>& y)
   {
-    FUNCNAME("operator*=(DOFVector<T>& x, const DOFVector<T>& y)");
-    const DOFAdmin *admin;
+    FUNCNAME("DOFVector<T>::operator-=(DOFVector<T>& x, const DOFVector<T>& y)");
 
-    TEST_EXIT(x.getFESpace() && y.getFESpace())
+    TEST_EXIT_DBG(x.getFESpace() && y.getFESpace())
       ("feSpace is NULL: %8X, %8X\n", x.getFESpace(), y.getFESpace());
-    TEST_EXIT((admin = x.getFESpace()->getAdmin()) &&
-	      (admin == y.getFESpace()->getAdmin()))
+    TEST_EXIT_DBG(x.getFESpace()->getAdmin() &&
+	      (x.getFESpace()->getAdmin() == y.getFESpace()->getAdmin()))
       ("no admin or different admins: %8X, %8X\n",
        x.getFESpace()->getAdmin(), y.getFESpace()->getAdmin());
-    TEST_EXIT(x.getSize() == y.getSize())("different sizes\n");
-
+    TEST_EXIT_DBG(x.getSize() == y.getSize())("different sizes\n");
+    
     typename DOFVector<T>::Iterator xIterator(dynamic_cast<DOFIndexed<T>*>(&x), USED_DOFS);
     typename DOFVector<T>::Iterator yIterator(dynamic_cast<DOFIndexed<T>*>(const_cast<DOFVector<T>*>(&y)), USED_DOFS);
-    for(xIterator.reset(), yIterator.reset();
-	!xIterator.end();
-	++xIterator, ++yIterator) 
-      {  
-	*xIterator -= *yIterator; 
-      }
+    for (xIterator.reset(), yIterator.reset();
+	 !xIterator.end();
+	 ++xIterator, ++yIterator) {
+      *xIterator -= *yIterator; 
+    }
     return x;
   }
 
-
-
-
   template<typename T>
   const DOFVector<T>& operator*=(DOFVector<T>& x, const DOFVector<T>& y)
   {
-    FUNCNAME("operator*=(DOFVector<T>& x, const DOFVector<T>& y)");
-    const DOFAdmin *admin;
-
-    TEST_EXIT(x.getFESpace() && y.getFESpace())
+    FUNCNAME("DOFVector<T>::operator*=(DOFVector<T>& x, const DOFVector<T>& y)");
+    
+    TEST_EXIT_DBG(x.getFESpace() && y.getFESpace())
       ("feSpace is NULL: %8X, %8X\n", x.getFESpace(), y.getFESpace());
-    TEST_EXIT((admin = x.getFESpace()->getAdmin()) &&
-	      (admin == y.getFESpace()->getAdmin()))
+    TEST_EXIT_DBG(x.getFESpace()->getAdmin() &&
+	      (x.getFESpace()->getAdmin() == y.getFESpace()->getAdmin()))
       ("no admin or different admins: %8X, %8X\n",
        x.getFESpace()->getAdmin(), y.getFESpace()->getAdmin());
-    TEST_EXIT(x.getSize() == y.getSize())("different sizes\n");
-
+    TEST_EXIT_DBG(x.getSize() == y.getSize())("different sizes\n");
+    
     typename DOFVector<T>::Iterator xIterator(dynamic_cast<DOFIndexed<T>*>(&x), USED_DOFS);
     typename DOFVector<T>::Iterator yIterator(dynamic_cast<DOFIndexed<T>*>(const_cast<DOFVector<T>*>(&y)), USED_DOFS);
-    for(xIterator.reset(), yIterator.reset();
-	!xIterator.end();
-	++xIterator, ++yIterator) 
-      {  
-	*xIterator *= *yIterator; 
-      }
+    for (xIterator.reset(), yIterator.reset();
+	 !xIterator.end();
+	 ++xIterator, ++yIterator) {
+      *xIterator *= *yIterator; 
+    }
 
     return x;
   }
-  // F.H. 17/3/2006
-
 
   template<typename T>
   T operator*(DOFVector<T>& x, DOFVector<T>& y)
   {
     FUNCNAME("DOFVector<T>::operator*(DOFVector<T>& x, DOFVector<T>& y)");
-    T dot;
-    const DOFAdmin *admin = NULL;
 
-    TEST_EXIT(x.getFESpace() && y.getFESpace())
+    TEST_EXIT_DBG(x.getFESpace() && y.getFESpace())
       ("feSpace is NULL: %8X, %8X\n", x.getFESpace(), y.getFESpace());
-    TEST_EXIT((admin = x.getFESpace()->getAdmin()) && (admin == y.getFESpace()->getAdmin()))
+    TEST_EXIT_DBG(x.getFESpace()->getAdmin() && 
+	      (x.getFESpace()->getAdmin() == y.getFESpace()->getAdmin()))
       ("no admin or different admins: %8X, %8X\n",
        x.getFESpace()->getAdmin(), y.getFESpace()->getAdmin());
-    TEST_EXIT(x.getSize() == y.getSize())("different sizes\n");
-
-    dot = 0;
+    TEST_EXIT_DBG(x.getSize() == y.getSize())("different sizes\n");
 
+    T dot = 0;    
     typename DOFVector<T>::Iterator xIterator(dynamic_cast<DOFIndexed<T>*>(&x), USED_DOFS);
     typename DOFVector<T>::Iterator yIterator(dynamic_cast<DOFIndexed<T>*>(&y), USED_DOFS);
     for (xIterator.reset(), yIterator.reset();
 	 !xIterator.end();
-	 ++xIterator, ++yIterator) 
-      {
-	dot += (*xIterator) * (*yIterator);
-      };
+	 ++xIterator, ++yIterator) {
+      dot += (*xIterator) * (*yIterator);
+    };
 
     return(dot);
   }
@@ -1180,33 +934,32 @@ namespace AMDiS {
   {
     FUNCNAME("DOFVector<T>::mv()");
 
-    TEST_EXIT(a.getRowFESpace() && a.getColFESpace() && x.getFESpace() && result.getFESpace())
+    TEST_EXIT_DBG(a.getRowFESpace() && a.getColFESpace() && x.getFESpace() && result.getFESpace())
       ("getFESpace() is NULL: %8X, %8X, %8X, %8X\n", 
        a.getRowFESpace(), a.getColFESpace(), x.getFESpace(), result.getFESpace());
-
-    const DOFAdmin *rowAdmin = a.getRowFESpace()->getAdmin();
-    const DOFAdmin *colAdmin = a.getColFESpace()->getAdmin();
-
-    TEST_EXIT((rowAdmin && colAdmin) && 
-	      (((transpose == NoTranspose) && (colAdmin == x.getFESpace()->getAdmin()) && 
-		(rowAdmin == result.getFESpace()->getAdmin()))||
-	       ((transpose == Transpose) && (rowAdmin == x.getFESpace()->getAdmin()) && 
-		(colAdmin == result.getFESpace()->getAdmin()))))
+    
+    TEST_EXIT_DBG((a.getRowFESpace()->getAdmin() && a.getColFESpace()->getAdmin()) && 
+	      (((transpose == NoTranspose) && 
+		(a.getColFESpace()->getAdmin() == x.getFESpace()->getAdmin()) && 
+		(a.getRowFESpace()->getAdmin() == result.getFESpace()->getAdmin())) ||
+	       ((transpose == Transpose) && 
+		(a.getRowFESpace()->getAdmin() == x.getFESpace()->getAdmin()) && 
+		(a.getColFESpace()->getAdmin() == result.getFESpace()->getAdmin()))))
       ("no admin or different admins: %8X, %8X, %8X, %8X\n",
        a.getRowFESpace()->getAdmin(), a.getColFESpace()->getAdmin(), 
        x.getFESpace()->getAdmin(), result.getFESpace()->getAdmin());
-
+    
     if (transpose == NoTranspose) {
-      TEST_EXIT(static_cast<int>(x.getSize()) >= colAdmin->getUsedSize())
+      TEST_EXIT_DBG(static_cast<int>(x.getSize()) >= a.getColFESpace()->getAdmin()->getUsedSize())
 	("x.size = %d too small: admin->sizeUsed = %d\n",
-	 x.getSize(), colAdmin->getUsedSize());
-      TEST_EXIT(static_cast<int>( result.getSize()) >= rowAdmin->getUsedSize())
+	 x.getSize(), a.getColFESpace()->getAdmin()->getUsedSize());
+      TEST_EXIT_DBG(static_cast<int>( result.getSize()) >= a.getRowFESpace()->getAdmin()->getUsedSize())
 	("size = %d too small: admin->sizeUsed = %d\n",
-	 result.getSize(), rowAdmin->getUsedSize());
-      TEST_EXIT(static_cast<int>( a.getSize()) >= rowAdmin->getUsedSize())
+	 result.getSize(), a.getRowFESpace()->getAdmin()->getUsedSize());
+      TEST_EXIT_DBG(static_cast<int>( a.getSize()) >= a.getRowFESpace()->getAdmin()->getUsedSize())
 	("a.size = %d too small: admin->sizeUsed = %d\n",
-	 a.getSize(), rowAdmin->getUsedSize());
-
+	 a.getSize(), a.getRowFESpace()->getAdmin()->getUsedSize());
+      
 
       typename DOFVector<T>::Iterator vecIterator(dynamic_cast<DOFIndexed<T>*>(&result), USED_DOFS); 
       DOFMatrix::Iterator rowIterator(const_cast<DOFMatrix*>(&a), USED_DOFS);
@@ -1233,16 +986,16 @@ namespace AMDiS {
       }
 
     } else if (transpose == Transpose) {
-      TEST_EXIT(static_cast<int>(x.getSize()) >= rowAdmin->getUsedSize())
+      TEST_EXIT_DBG(static_cast<int>(x.getSize()) >= a.getRowFESpace()->getAdmin()->getUsedSize())
 	("x.size = %d too small: admin->sizeUsed = %d\n",
-	 x.getSize(), rowAdmin->getUsedSize());
-      TEST_EXIT(static_cast<int>( result.getSize()) >= colAdmin->getUsedSize())
+	 x.getSize(), a.getRowFESpace()->getAdmin()->getUsedSize());
+      TEST_EXIT_DBG(static_cast<int>( result.getSize()) >= a.getColFESpace()->getAdmin()->getUsedSize())
 	("size = %d too small: admin->sizeUsed = %d\n",
-	 result.getSize(), colAdmin->getUsedSize());
-      TEST_EXIT(static_cast<int>( a.getSize()) >= rowAdmin->getUsedSize())
+	 result.getSize(), a.getColFESpace()->getAdmin()->getUsedSize());
+      TEST_EXIT_DBG(static_cast<int>( a.getSize()) >= a.getRowFESpace()->getAdmin()->getUsedSize())
 	("a.size = %d too small: admin->sizeUsed = %d\n",
-	 a.getSize(), rowAdmin->getUsedSize());
-
+	 a.getSize(), a.getRowFESpace()->getAdmin()->getUsedSize());
+      
       if(!add) {
 	typename DOFVector<T>::Iterator vecIterator(dynamic_cast<DOFIndexed<T>*>(&result), USED_DOFS);
 	for(vecIterator.reset();
@@ -1279,21 +1032,20 @@ namespace AMDiS {
   {
     FUNCNAME("DOFVector<T>::axpy()");
 
-    TEST_EXIT(x.getFESpace() && y.getFESpace())
+    TEST_EXIT_DBG(x.getFESpace() && y.getFESpace())
       ("feSpace is NULL: %8X, %8X\n", x.getFESpace(), y.getFESpace());
 
-    const DOFAdmin *admin = x.getFESpace()->getAdmin();
-
-    TEST_EXIT((admin) && (admin == y.getFESpace()->getAdmin()))
+    TEST_EXIT_DBG(x.getFESpace()->getAdmin() && 
+	      (x.getFESpace()->getAdmin() == y.getFESpace()->getAdmin()))
       ("no admin or different admins: %8X, %8X\n",
        x.getFESpace()->getAdmin(), y.getFESpace()->getAdmin());
-    TEST_EXIT(static_cast<int>(x.getSize()) >= admin->getUsedSize())
+    TEST_EXIT_DBG(static_cast<int>(x.getSize()) >= x.getFESpace()->getAdmin()->getUsedSize())
       ("size = %d too small: admin->size = %d\n", x.getSize(), 
-       admin->getUsedSize());
-    TEST_EXIT(static_cast<int>(y.getSize()) >= admin->getUsedSize())
+       x.getFESpace()->getAdmin()->getUsedSize());
+    TEST_EXIT_DBG(static_cast<int>(y.getSize()) >= x.getFESpace()->getAdmin()->getUsedSize())
       ("y.size = %d too small: admin->size = %d\n", y.getSize(), 
-       admin->getUsedSize());
-
+       x.getFESpace()->getAdmin()->getUsedSize());
+    
       // This is the old implementation of the mv-multiplication. It have been changed
       // because of the OpenMP-parallelization:
 //     typename DOFVector<T>::Iterator xIterator(dynamic_cast<DOFIndexed<T>*>(const_cast<DOFVector<T>*>(&x)), USED_DOFS);
@@ -1312,7 +1064,7 @@ namespace AMDiS {
 #pragma omp parallel for schedule(dynamic, 25000) default(shared) private(i)
 #endif
       for (i = 0; i < maxI; i++) {
-	if (!admin->isDOFFree(i)) {
+	if (!x.getFESpace()->getAdmin()->isDOFFree(i)) {
 	  y[i] += alpha * x[i];
 	}
       }
@@ -1347,21 +1099,20 @@ namespace AMDiS {
   {
     FUNCNAME("DOFVector<T>::xpay()");
 
-    TEST_EXIT(x.getFESpace() && y.getFESpace())
+    TEST_EXIT_DBG(x.getFESpace() && y.getFESpace())
       ("feSpace is NULL: %8X, %8X\n", x.getFESpace(), y.getFESpace());
 
-    const DOFAdmin *admin = x.getFESpace()->getAdmin();
-
-    TEST_EXIT(admin && (admin == y.getFESpace()->getAdmin()))
+    TEST_EXIT_DBG(x.getFESpace()->getAdmin() && 
+	      (x.getFESpace()->getAdmin() == y.getFESpace()->getAdmin()))
       ("no admin or different admins: %8X, %8X\n",
        x.getFESpace()->getAdmin(), y.getFESpace()->getAdmin());
-    TEST_EXIT(static_cast<int>(x.getSize()) >= admin->getUsedSize())
+    TEST_EXIT_DBG(static_cast<int>(x.getSize()) >= x.getFESpace()->getAdmin()->getUsedSize())
       ("size = %d too small: admin->size = %d\n", x.getSize(), 
-       admin->getUsedSize());
-    TEST_EXIT(static_cast<int>(y.getSize()) >= admin->getUsedSize())
+       x.getFESpace()->getAdmin()->getUsedSize());
+    TEST_EXIT_DBG(static_cast<int>(y.getSize()) >= x.getFESpace()->getAdmin()->getUsedSize())
       ("y.size = %d too small: admin->size = %d\n", y.getSize(), 
-       admin->getUsedSize());
-
+       x.getFESpace()->getAdmin()->getUsedSize());
+    
     // This is the old implementation of the mv-multiplication. It have been changed
     // because of the OpenMP-parallelization:
     //     typename DOFVector<T>::Iterator xIterator(dynamic_cast<DOFIndexed<T>*>(const_cast<DOFVector<T>*>(&x)), USED_DOFS);
@@ -1376,6 +1127,8 @@ namespace AMDiS {
       int i;
       int maxI = y.getSize();
 
+      const DOFAdmin* admin = x.getFESpace()->getAdmin();
+
 #ifdef _OPENMP
 #pragma omp parallel for schedule(dynamic, 25000) default(shared) private(i)
 #endif
@@ -1474,14 +1227,14 @@ namespace AMDiS {
   {
     FUNCNAME("DOFVector<T>::getVecAtQPs()");
   
-    TEST_EXIT(quad || quadFast)("neither quad nor quadFast defined\n");
+    TEST_EXIT_DBG(quad || quadFast)("neither quad nor quadFast defined\n");
 
-    if(quad && quadFast) {
-      TEST_EXIT(quad == quadFast->getQuadrature())
-	("quad != quadFast->quadrature\n");
+    if (quad && quadFast) {
+      TEST_EXIT_DBG(quad == quadFast->getQuadrature())
+      	("quad != quadFast->quadrature\n");
     }
 
-    TEST_EXIT(!quadFast || quadFast->getBasisFunctions() == feSpace->getBasisFcts())
+    TEST_EXIT_DBG(!quadFast || quadFast->getBasisFunctions() == feSpace->getBasisFcts())
       ("invalid basis functions");
 
     Element *el = elInfo->getElement();
diff --git a/AMDiS/src/DiagonalPreconditioner.cc b/AMDiS/src/DiagonalPreconditioner.cc
index a0bf3108d335ab7aa79561f8921daf4f17cddab1..1678fabc84f9494515812afdea1f94e446eda05a 100644
--- a/AMDiS/src/DiagonalPreconditioner.cc
+++ b/AMDiS/src/DiagonalPreconditioner.cc
@@ -11,8 +11,8 @@ namespace AMDiS {
   {
     FUNCNAME("DiagonalPreconditioner::precon()");
 
-    TEST_EXIT(matrix[row])("no matrix\n");
-    TEST_EXIT(x)("no solution vector\n");
+    TEST_EXIT_DBG(matrix[row])("no matrix\n");
+    TEST_EXIT_DBG(x)("no solution vector\n");
 
     DOFMatrix::Iterator rowIterator((*matrix[row]), USED_DOFS);
     DOFVector<double>::Iterator vecIterator(x, USED_DOFS);
@@ -30,33 +30,30 @@ namespace AMDiS {
     } else {
       for (vecIterator.reset(), rowIterator.reset(); 
 	   !vecIterator.end(); 
-	   ++vecIterator, ++rowIterator) 
-	{
-	  if (rowIterator->size() != 0) {
-	    (*vecIterator) /= (*rowIterator)[0].entry;
-	  }
-	}    
+	   ++vecIterator, ++rowIterator) {
+	if (rowIterator->size() != 0) {
+	  (*vecIterator) /= (*rowIterator)[0].entry;
+	}
+      }    
     }
   }
     
-    void DiagonalPreconditionerStd::precon(::std::vector<double>* x)
-    {
-	FUNCNAME("DiagonalPreconditionerStd::precon()");
-	
-	TEST_EXIT(x)("no solution vector\n");
-	TEST_EXIT(x->size() == matrix->size())("solution vector and matrix have different size\n");
-	
-	::std::vector<double>::iterator vecIt;
-	::std::vector< ::std::vector<MatEntry> >::iterator matrixIt;
+  void DiagonalPreconditionerStd::precon(::std::vector<double>* x)
+  {
+    FUNCNAME("DiagonalPreconditionerStd::precon()");
 	
-	for (vecIt = x->begin(), matrixIt = matrix->begin(); 
+    TEST_EXIT_DBG(x)("no solution vector\n");
+    TEST_EXIT_DBG(x->size() == matrix->size())("solution vector and matrix have different size\n");
+    
+    ::std::vector<double>::iterator vecIt;
+    ::std::vector< ::std::vector<MatEntry> >::iterator matrixIt;
+      
+    for (vecIt = x->begin(), matrixIt = matrix->begin(); 
 	 vecIt < x->end(); 
-	     ++vecIt, ++matrixIt)
-	{
-	    if (matrixIt->size() != 0) {
-		(*vecIt) /= (*matrixIt)[0].entry;
-	    }
-	}
+	 ++vecIt, ++matrixIt) {
+      if (matrixIt->size() != 0) {
+	(*vecIt) /= (*matrixIt)[0].entry;
+      }
     }
-
+  }  
 }
diff --git a/AMDiS/src/DirichletBC.cc b/AMDiS/src/DirichletBC.cc
index 3b4a924f953db31839fe81122f93d309e0cced58..e86656152b07e18f5d8d16ca2a642a4f1835d32a 100644
--- a/AMDiS/src/DirichletBC.cc
+++ b/AMDiS/src/DirichletBC.cc
@@ -21,7 +21,7 @@ namespace AMDiS {
   {
     FUNCNAME("DirichletBC::fillBoundaryCondition()");
 
-    TEST_EXIT(matrix->getRowFESpace() == rowFESpace)
+    TEST_EXIT_DBG(matrix->getRowFESpace() == rowFESpace)
       ("invalid row fe space\n");
   }
 
@@ -33,7 +33,7 @@ namespace AMDiS {
   {
     FUNCNAME("DirichletBC::fillBoundaryCondition()");
 
-    TEST_EXIT(vector->getFESpace() == rowFESpace)
+    TEST_EXIT_DBG(vector->getFESpace() == rowFESpace)
       ("invalid row fe space\n");
 
     const BasisFunction *basFcts = rowFESpace->getBasisFcts();
diff --git a/AMDiS/src/DualTraverse.cc b/AMDiS/src/DualTraverse.cc
index 80833addf298c4a761bbce37e3a7f474290cf17d..799d46c2a05731578eceed9cf74a996ad289981f 100644
--- a/AMDiS/src/DualTraverse.cc
+++ b/AMDiS/src/DualTraverse.cc
@@ -62,8 +62,8 @@ namespace AMDiS {
       *elInfo2 = stack2.traverseNext(*elInfo2);
 
     // finished ?
-    if(*elInfo1 == NULL || *elInfo2 == NULL) {
-      TEST_EXIT(*elInfo1 == *elInfo2)("invalid dual traverse\n");
+    if (*elInfo1 == NULL || *elInfo2 == NULL) {
+      TEST_EXIT_DBG(*elInfo1 == *elInfo2)("invalid dual traverse\n");
       return false;
     }
 
@@ -103,8 +103,8 @@ namespace AMDiS {
     }
 
     // finished ?
-    if(*elInfo1 == NULL || *elInfo2 == NULL) {
-      TEST_EXIT(*elInfo1 == *elInfo2)("invalid dual traverse\n");
+    if (*elInfo1 == NULL || *elInfo2 == NULL) {
+      TEST_EXIT_DBG(*elInfo1 == *elInfo2)("invalid dual traverse\n");
       return false;
     }
 
diff --git a/AMDiS/src/ElInfo.cc b/AMDiS/src/ElInfo.cc
index 48bae890301ae3fa68d00898fa8f7349d42aa217..7a32f5ed3699d3490e51a65cbf71994705686051 100644
--- a/AMDiS/src/ElInfo.cc
+++ b/AMDiS/src/ElInfo.cc
@@ -101,7 +101,7 @@ namespace AMDiS {
     int dim = coords.getSize() - 1;
     int dow = Global::getGeo(WORLD);
 
-    TEST_EXIT(dim <= dow)("dim > dow\n");
+    TEST_EXIT_DBG(dim <= dow)("dim > dow\n");
 
     double det = 0.0;
 
@@ -161,7 +161,7 @@ namespace AMDiS {
 
   void ElInfo::testFlag(const Flag& flags) const
   {
-    TEST_EXIT(fillFlag_.isSet(flags))("flag not set\n");
+    TEST_EXIT_DBG(fillFlag_.isSet(flags))("flag not set\n");
   }
 
 
diff --git a/AMDiS/src/ElInfo1d.cc b/AMDiS/src/ElInfo1d.cc
index ac72bca6670dca5345d2c74a69c15749e08c1a45..c6a134d6950b7a1c39c4cd13dadb168c64104852 100644
--- a/AMDiS/src/ElInfo1d.cc
+++ b/AMDiS/src/ElInfo1d.cc
@@ -122,28 +122,26 @@ namespace AMDiS {
 
     static DimVec<double> vec(dim, NO_INIT);
 
-    TEST_EXIT(lambda)("lambda must not be NULL\n");
-    TEST_EXIT(dim==1)("dim!=1\n");
-    TEST_EXIT(Global::getGeo(WORLD)==dim)("not yet for DIM != DIM_OF_WORLD\n");
+    TEST_EXIT_DBG(lambda)("lambda must not be NULL\n");
+    TEST_EXIT_DBG(dim == 1)("dim!=1\n");
+    TEST_EXIT_DBG(Global::getGeo(WORLD) == dim)("not yet for DIM != DIM_OF_WORLD\n");
 
     if (abs(length) < DBL_TOL) {
       ERROR_EXIT("length = %le; abort\n", length);
       return 0;
     }
 
-    (*lambda)[1] = (x[0]-a)/length;
+    (*lambda)[1] = (x[0] - a) / length;
     (*lambda)[0] = 1.0 - (*lambda)[1];
 
     int k = -1;
     lmin = 0.0;
-    int j = 0;
     for (int i = 0; i <= dim; i++) {
       if ((*lambda)[i] < -1.E-5) {
 	if ((*lambda)[i] < lmin) {
 	  k = i;
 	  lmin = (*lambda)[i];
 	}
-	j++;
       }
     }
 
@@ -159,7 +157,7 @@ namespace AMDiS {
   {
     normal = coord_[side] - coord_[(side + 1) % 2];
     double det = norm(&normal);
-    TEST_EXIT(det > 1.e-30)("det = 0 on side %d\n", side);
+    TEST_EXIT_DBG(det > 1.e-30)("det = 0 on side %d\n", side);
     normal *= 1.0 / det;
 
     return(det);
@@ -178,14 +176,14 @@ namespace AMDiS {
     double det = 0.0;
     int dow = Global::getGeo(WORLD);
 
-    TEST_EXIT(dow =  2)(" element normal only well defined for  DIM_OF_WORLD = DIM + 1 !!");
+    TEST_EXIT_DBG(dow == 2)(" element normal only well defined for  DIM_OF_WORLD = DIM + 1 !!");
 
     elementNormal[0] = coord_[1][1] - coord_[0][1];
     elementNormal[1] = coord_[0][0] - coord_[1][0];
 
     det = norm(&elementNormal);
 
-    TEST_EXIT(det > 1.e-30)("det = 0");
+    TEST_EXIT_DBG(det > 1.e-30)("det = 0");
 
     elementNormal *= 1.0 / det;
     
@@ -200,9 +198,10 @@ namespace AMDiS {
     Element *nb;
     Element *elem = elinfo_old->element_;
 
-    TEST_EXIT(elem->getChild(0))("no children?\n");
-    TEST_EXIT((element_ = const_cast<Element*>( elem->getChild(ichild))))
-      ("missing child %d?\n", ichild);
+    TEST_EXIT_DBG(elem->getChild(0))("no children?\n");
+    element_ = const_cast<Element*>(elem->getChild(ichild));
+
+    TEST_EXIT_DBG(element_)("missing child %d?\n", ichild);
 
     macroElement_ = elinfo_old->macroElement_;
     fillFlag_ = elinfo_old->fillFlag_;
@@ -231,7 +230,7 @@ namespace AMDiS {
     if (fillFlag_.isSet(Mesh::FILL_NEIGH) || fillFlag_.isSet(Mesh::FILL_OPP_COORDS)) {
       WorldVector<double> oppC;
       
-      TEST_EXIT(fillFlag_.isSet(Mesh::FILL_COORDS))
+      TEST_EXIT_DBG(fillFlag_.isSet(Mesh::FILL_COORDS))
 	("FILL_OPP_COORDS only with FILL_COORDS\n");
       
       for (int i = 0; i < neighbours; i++) {
diff --git a/AMDiS/src/ElInfo2d.cc b/AMDiS/src/ElInfo2d.cc
index e7e4d1f677843905fecb4218ad46655e770ff024..893e96f55d8489df0efc6672f394fc10e454d565 100644
--- a/AMDiS/src/ElInfo2d.cc
+++ b/AMDiS/src/ElInfo2d.cc
@@ -141,11 +141,11 @@ namespace AMDiS {
 
     Flag fill_flag = elinfo_old->fillFlag_;
 
-    TEST_EXIT(elem->getFirstChild())("no children?\n");
-    TEST_EXIT(element_ = const_cast<Element*>((ichild == 0) ? 
-					      elem->getFirstChild() : 
-					      elem->getSecondChild()))
-      ("missing child %d?\n", ichild);
+    TEST_EXIT_DBG(elem->getFirstChild())("no children?\n");
+    element_ = const_cast<Element*>((ichild == 0) ? 
+				    elem->getFirstChild() : 
+				    elem->getSecondChild());
+    TEST_EXIT_DBG(element_)("missing child %d?\n", ichild);
 
     macroElement_  = elinfo_old->macroElement_;
     fillFlag_ = fill_flag;
@@ -231,8 +231,8 @@ namespace AMDiS {
 	nb = elinfo_old->neighbour_[2];
 	if (nb) {
 	  TEST(elinfo_old->oppVertex_[2] == 2)("invalid neighbour\n"); 
-	  TEST_EXIT(nb->getFirstChild())("missing first child?\n");
-	  TEST_EXIT(nb->getSecondChild())("missing second child?\n");
+	  TEST_EXIT_DBG(nb->getFirstChild())("missing first child?\n");
+	  TEST_EXIT_DBG(nb->getSecondChild())("missing second child?\n");
 	 
 	  nb = nb->getSecondChild();
 
@@ -399,9 +399,7 @@ namespace AMDiS {
 
   double ElInfo2d::calcGrdLambda(DimVec<WorldVector<double> >& grd_lam) const
   {
-    FUNCNAME("ElInfo2d::calcGrdLambda");
-    //   TEST_EXIT(Global::getGeo(WORLD) == 2)
-    //     ("dim != dim_of_world ! use parametric elements!\n");
+    FUNCNAME("ElInfo2d::calcGrdLambda()");
   
     WorldVector<double> e1, e2;
     double adet = 0.0;
@@ -476,7 +474,7 @@ namespace AMDiS {
   {
     FUNCNAME("ElInfo::worldToCoord()");
 
-    TEST_EXIT(lambda)("lambda must not be NULL\n");
+    TEST_EXIT_DBG(lambda)("lambda must not be NULL\n");
 
     DimVec<WorldVector<double> > edge(mesh_->getDim(), NO_INIT);
     WorldVector<double> x; 
@@ -548,7 +546,7 @@ namespace AMDiS {
 
     double det = norm(&normal);
 
-    TEST_EXIT(det > 1.e-30)("det = 0 on face %d\n", side);
+    TEST_EXIT_DBG(det > 1.e-30)("det = 0 on face %d\n", side);
 
     normal *= 1.0 / det;
     
@@ -565,7 +563,7 @@ namespace AMDiS {
   {
     FUNCNAME("ElInfo::getElementNormal()");
 
-    TEST_EXIT(Global::getGeo(WORLD) == 3)(" element normal only well defined for  DIM_OF_WORLD = DIM + 1 !!");
+    TEST_EXIT_DBG(Global::getGeo(WORLD) == 3)(" element normal only well defined for  DIM_OF_WORLD = DIM + 1 !!");
 
     WorldVector<double> e0 = coord_[1] - coord_[0];
     WorldVector<double> e1 = coord_[2] - coord_[0];
@@ -574,7 +572,7 @@ namespace AMDiS {
 
     double det = norm(&elementNormal);
 
-    TEST_EXIT(det > 1.e-30)("det = 0");
+    TEST_EXIT_DBG(det > 1.e-30)("det = 0");
 
     elementNormal *= 1.0 / det;
     
diff --git a/AMDiS/src/ElInfo3d.cc b/AMDiS/src/ElInfo3d.cc
index 138e7f04bde0f530d378ca7f94b9f56b849ff530..9114c498864ef5957fc584494a8a7944f471794b 100644
--- a/AMDiS/src/ElInfo3d.cc
+++ b/AMDiS/src/ElInfo3d.cc
@@ -118,13 +118,13 @@ namespace AMDiS {
   {
     FUNCNAME("ElInfo3d::calcGrdLambda()");
 
-    TEST_EXIT(Global::getGeo(WORLD) == 3)
+    TEST_EXIT_DBG(Global::getGeo(WORLD) == 3)
       ("dim != dim_of_world ! use parametric elements!\n");
 
-    WorldVector<double>   e1, e2, e3;
-    WorldVector<double>   v0;
-    double        det, adet;
-    double        a11, a12, a13, a21, a22, a23, a31, a32, a33;
+    WorldVector<double> e1, e2, e3;
+    WorldVector<double> v0;
+    double det, adet;
+    double a11, a12, a13, a21, a22, a23, a31, a32, a33;
 
     testFlag(Mesh::FILL_COORDS);
 
@@ -187,12 +187,12 @@ namespace AMDiS {
   
     static DimVec<double> vec(mesh_->getDim(), NO_INIT);
 
-    TEST_EXIT(lambda)("lambda must not be NULL\n");
+    TEST_EXIT_DBG(lambda)("lambda must not be NULL\n");
 
     int dim = mesh_->getDim();
     int dimOfWorld = Global::getGeo(WORLD);
 
-    TEST_EXIT(dim == dimOfWorld)("dim!=dimOfWorld not yet implemented\n");
+    TEST_EXIT_DBG(dim == dimOfWorld)("dim!=dimOfWorld not yet implemented\n");
     
     /*  wir haben das gleichungssystem zu loesen: */
     /*       ( q1x q2x q3x)  (lambda1)     (qx)      */
@@ -297,7 +297,7 @@ namespace AMDiS {
 		  }
 		}
 	      }
-	      TEST_EXIT(k >= 0)("neighbour dof not found\n");
+	      TEST_EXIT_DBG(k >= 0)("neighbour dof not found\n");
 	      
 	      if (nb->isNewCoordSet())
 		oppCoord_[ineigh] = *(nb->getNewCoord());
@@ -340,7 +340,7 @@ namespace AMDiS {
 	  normal[i] = -normal[i];
 
       det = norm(&normal);
-      TEST_EXIT(det > 1.e-30)("det = 0 on face %d\n", face);
+      TEST_EXIT_DBG(det > 1.e-30)("det = 0 on face %d\n", face);
 
       normal[0] /= det;
       normal[1] /= det;
@@ -374,7 +374,7 @@ namespace AMDiS {
     Flag fill_opp_coords;
     Mesh *mesh = elinfo_old->getMesh();
 
-    TEST_EXIT(el_old->getChild(0))("missing child?\n");  /* Kuni 22.08.96 */
+    TEST_EXIT_DBG(el_old->getChild(0))("missing child?\n");  /* Kuni 22.08.96 */
 
     element_ = const_cast<Element*>( el_old->getChild(ichild));
     macroElement_ = elinfo_old->macroElement_;
@@ -383,7 +383,7 @@ namespace AMDiS {
     level_ = elinfo_old->level_ + 1;
     el_type = (( dynamic_cast<ElInfo3d*>(const_cast<ElInfo*>( elinfo_old)))->el_type + 1) % 3;
 
-    TEST_EXIT(element_)("missing child %d?\n", ichild);
+    TEST_EXIT_DBG(element_)("missing child %d?\n", ichild);
 
     if (fillFlag__local.isAnySet()) {
       el_type_local = ( dynamic_cast<ElInfo3d*>(const_cast<ElInfo*>( elinfo_old)))->getType();
@@ -461,7 +461,7 @@ namespace AMDiS {
       
       for (int i = 1; i < 3; i++) {
 	if ((nb = const_cast<Element*>( (*neigh_old)[cv[i]]))) {
-	  TEST_EXIT(nb->getChild(0))("nonconforming triangulation\n");
+	  TEST_EXIT_DBG(nb->getChild(0))("nonconforming triangulation\n");
 	  
 	  int k;
 	  for (k = 0; k < 2; k++) { /* look at both childs of old neighbour */
@@ -487,7 +487,6 @@ namespace AMDiS {
 		  break;
 		}
 	      } else {
-		//TEST_EXIT(dof == nbk->getDOF(2))("opp_vertex not found\n");
 		if (dof != nbk->getDOF(2)) { 
 		  ov = -1; 
 		  break; 
@@ -507,8 +506,6 @@ namespace AMDiS {
 	    
 	  } /* end for k */
 
-	  //TEST_EXIT(k<2)("child not found with vertex\n");
-
 	  // periodic ?
 	  if (k == 2 || ov == -1) {
 	    for (k = 0; k < 2; k++) {  /* look at both childs of old neighbour */
@@ -536,8 +533,8 @@ namespace AMDiS {
 		    break;
 		  }
 		} else {
-		  TEST_EXIT(dof == nbk->getDOF(2) || 
-			    mesh->associated(dof[0], nbk->getDOF(2, 0)))
+		  TEST_EXIT_DBG(dof == nbk->getDOF(2) || 
+				mesh->associated(dof[0], nbk->getDOF(2, 0)))
 		    ("opp_vertex not found\n");
 		  ov = 2;
 		}
@@ -553,7 +550,7 @@ namespace AMDiS {
 	      }
 	      
 	    } /* end for k */
-	    TEST_EXIT(k < 2)("child not found with vertex\n");
+	    TEST_EXIT_DBG(k < 2)("child not found with vertex\n");
 	  }
 	} else {
 	  (*neigh_local)[i] = NULL;
diff --git a/AMDiS/src/Element.cc b/AMDiS/src/Element.cc
index 6a367857f951fc2bbc47af459d3fd9637a146d07..e27ebc6b641ce7fe5cfc887046c288386689269d 100644
--- a/AMDiS/src/Element.cc
+++ b/AMDiS/src/Element.cc
@@ -26,7 +26,8 @@ namespace AMDiS {
   void Element::setDOFPtrs()
   {
     FUNCNAME("Element::setDOFPtrs()");
-    TEST_EXIT(mesh)("no mesh!\n");
+
+    TEST_EXIT_DBG(mesh)("no mesh!\n");
 
     dof = mesh->createDOFPtrs();  
   }
@@ -236,8 +237,8 @@ namespace AMDiS {
   }
 
   double Element::getNewCoord(int j) const {
-    if (j>=0) {
-      TEST_EXIT(newCoord)("newCoord = NULL\n");
+    if (j >=0 ) {
+      TEST_EXIT_DBG(newCoord)("newCoord = NULL\n");
       return (*newCoord)[j];
     } else { 
       return (newCoord!=NULL);
@@ -274,9 +275,9 @@ namespace AMDiS {
 
       ndof = 0;
 
-      for(i = 0; i < mesh->getNumberOfDOFAdmin(); i++) {
+      for (i = 0; i < mesh->getNumberOfDOFAdmin(); i++) {
 	const DOFAdmin *localAdmin = &mesh->getDOFAdmin(i);
-	TEST_EXIT(localAdmin)("no admin[%d]\n", i);
+	TEST_EXIT_DBG(localAdmin)("no admin[%d]\n", i);
 	ndof += localAdmin->getNumberOfDOFs(position);	
       }
 
diff --git a/AMDiS/src/Element.h b/AMDiS/src/Element.h
index 7696a70ecfaa4a818026ca78503b9b9f939aec31..e0f371300d5013cdb8861a96ac4a6ebe7ddad27f 100644
--- a/AMDiS/src/Element.h
+++ b/AMDiS/src/Element.h
@@ -126,7 +126,7 @@ namespace AMDiS {
      */
     virtual Element* getChild(int i) const {
       FUNCNAME("Element::getChild()");
-      TEST_EXIT(i==0 || i==1)("i must be 0 or 1\n");
+      TEST_EXIT_DBG(i==0 || i==1)("i must be 0 or 1\n");
       return child[i];
     };
 
@@ -173,9 +173,9 @@ namespace AMDiS {
     inline double getEstimation(int row) const
     {
       if (isLeaf()) {
-	TEST_EXIT(elementData)("leaf element without leaf data\n");
+	TEST_EXIT_DBG(elementData)("leaf element without leaf data\n");
 	ElementData *ld = elementData->getElementData(ESTIMATABLE);
-	TEST_EXIT(ld)("leaf data not estimatable!\n");
+	TEST_EXIT_DBG(ld)("leaf data not estimatable!\n");
 
 	return dynamic_cast<LeafDataEstimatableInterface*>(ld)->getErrorEstimate(row);
       }	
@@ -189,9 +189,9 @@ namespace AMDiS {
      */
     inline double getCoarseningEstimation(int row) {
       if (isLeaf()) {
-	TEST_EXIT(elementData)("leaf element without leaf data\n");
+	TEST_EXIT_DBG(elementData)("leaf element without leaf data\n");
 	ElementData *ld = elementData->getElementData(COARSENABLE);
-	TEST_EXIT(ld)("element data not coarsenable!\n");
+	TEST_EXIT_DBG(ld)("element data not coarsenable!\n");
 
 	return dynamic_cast<LeafDataCoarsenableInterface*>(ld)->getCoarseningErrorEstimate(row);
       }
@@ -317,9 +317,9 @@ namespace AMDiS {
     inline void setEstimation(double est, int row)
     {
       if (isLeaf()) {
-	TEST_EXIT(elementData)("leaf element without leaf data\n");
+	TEST_EXIT_DBG(elementData)("leaf element without leaf data\n");
 	ElementData *ld = elementData->getElementData(ESTIMATABLE);
-	TEST_EXIT(ld)("leaf data not estimatable\n");
+	TEST_EXIT_DBG(ld)("leaf data not estimatable\n");
 
 	dynamic_cast<LeafDataEstimatableInterface*>(ld)->
 	  setErrorEstimate(row, est);
@@ -335,9 +335,9 @@ namespace AMDiS {
     inline void setCoarseningEstimation(double est, int row)
     {
       if (isLeaf()) {
-	TEST_EXIT(elementData)("leaf element without leaf data\n");
+	TEST_EXIT_DBG(elementData)("leaf element without leaf data\n");
 	ElementData *ld = elementData->getElementData(COARSENABLE);
-	TEST_EXIT(ld)("leaf data not coarsenable\n");
+	TEST_EXIT_DBG(ld)("leaf data not coarsenable\n");
 
 	dynamic_cast<LeafDataCoarsenableInterface*>(ld)->
 	  setCoarseningErrorEstimate(row, est);
diff --git a/AMDiS/src/ElementData.cc b/AMDiS/src/ElementData.cc
index 76707978383ede5f494caf751a350e8c94fb59db..05d43c34605588b54c13a6991f83d40a99581886 100644
--- a/AMDiS/src/ElementData.cc
+++ b/AMDiS/src/ElementData.cc
@@ -4,7 +4,7 @@ namespace AMDiS {
 
   void ElementData::serialize(::std::ostream& out) {
     ::std::string decoratedType;
-    if(decorated_) {
+    if (decorated_) {
       decoratedType = decorated_->getTypeName();
       out << decoratedType << ::std::endl;
       decorated_->serialize(out);
@@ -19,7 +19,7 @@ namespace AMDiS {
     ::std::string decoratedType;
     in >> decoratedType; 
     in.get();
-    if(decoratedType != "NULL") {
+    if (decoratedType != "NULL") {
       decorated_ = CreatorMap<ElementData>::getCreator(decoratedType)->create();
       decorated_->deserialize(in);
     } else {
diff --git a/AMDiS/src/ElementFileWriter.cc b/AMDiS/src/ElementFileWriter.cc
index b186b48cfb5af1c1f416da64c7d5b49d3c999832..ba5717157f1daaebd95b2f69241a080f5d828070 100644
--- a/AMDiS/src/ElementFileWriter.cc
+++ b/AMDiS/src/ElementFileWriter.cc
@@ -38,9 +38,6 @@ namespace AMDiS {
     GET_PARAMETER(0, name + "->output->index decimals", "%d", &indexDecimals);
     GET_PARAMETER(0, name + "->output->write every i-th timestep", "%d", 
 		  &tsModulo);
-
-    //   TEST_EXIT(vec.size() == mesh->getNumberOfLeaves())
-    //     ("illegal size !\n");
   }
 
   void ElementFileWriter::writeFiles(AdaptInfo *adaptInfo, bool force,
diff --git a/AMDiS/src/Estimator.cc b/AMDiS/src/Estimator.cc
index 3b70fe17aa1437ea9b7fb2134228216c056991f2..0354e8add638dd3213b48beebd760ea4a062316b 100755
--- a/AMDiS/src/Estimator.cc
+++ b/AMDiS/src/Estimator.cc
@@ -118,7 +118,7 @@ namespace AMDiS {
     mesh = uh[row == -1 ? 0 : row]->getFESpace()->getMesh();
 
     numSystems = static_cast<int>(uh.size());
-    TEST_EXIT(numSystems > 0)("no system set\n");
+    TEST_EXIT_DBG(numSystems > 0)("no system set\n");
 
     dim = mesh->getDim();
     basFcts = GET_MEMORY(const BasisFunction*, numSystems);
@@ -226,7 +226,7 @@ namespace AMDiS {
     Element *el, *neigh;
     int iq;
 
-    TEST_EXIT(numSystems > 0)("no system set\n");
+    TEST_EXIT_DBG(numSystems > 0)("no system set\n");
 
     ::std::vector<Operator*>::iterator it;
 
@@ -268,8 +268,8 @@ namespace AMDiS {
 	}
     
       //uh[system]->getLocalVector(el, uhEl);
-      if(timestep) {
-	TEST_EXIT(uhOld[system])("no uhOld\n");
+      if (timestep) {
+	TEST_EXIT_DBG(uhOld[system])("no uhOld\n");
 	uhOld[system]->getLocalVector(el, uhOldEl[system]);
       }
       
@@ -390,35 +390,34 @@ namespace AMDiS {
 
 	      bool periodicCoords = false;
 
-	      if(ldp) {
+	      if (ldp) {
 		::std::list<LeafDataPeriodic::PeriodicInfo>::iterator it;
-		for(it = dynamic_cast<LeafDataPeriodic*>(ldp)->getInfoList().begin();
-		    it != dynamic_cast<LeafDataPeriodic*>(ldp)->getInfoList().end();
-		    ++it) 
-		  {
-		    if(it->elementSide == face) {
-		      for(i=0; i < dim; i++) {
-			i1 = faceIndEl[i];
-			i2 = faceIndNeigh[i];
-
-			for(j=0; j < dim; j++) {
-			  if(i1 == el->getVertexOfPosition(INDEX_OF_DIM(dim-1, 
-									dim),
-							   face,
-							   j))
-			    {
-			      break;
-			    }
+		for (it = dynamic_cast<LeafDataPeriodic*>(ldp)->getInfoList().begin();
+		     it != dynamic_cast<LeafDataPeriodic*>(ldp)->getInfoList().end();
+		     ++it) {
+
+		  if (it->elementSide == face) {
+		    for (i=0; i < dim; i++) {
+		      i1 = faceIndEl[i];
+		      i2 = faceIndNeigh[i];
+
+		      for(j=0; j < dim; j++) {
+			if (i1 == el->getVertexOfPosition(INDEX_OF_DIM(dim-1, 
+								       dim),
+							  face,
+							  j)) {
+			  break;
 			}
-
-			TEST_EXIT(j != dim)("vertex i1 not on face ???\n");
-
-			neighInfo->getCoord(i2) = (*(it->periodicCoords))[j];
 		      }
-		      periodicCoords = true;
-		      break;
+
+		      TEST_EXIT_DBG(j != dim)("vertex i1 not on face ???\n");
+		      
+		      neighInfo->getCoord(i2) = (*(it->periodicCoords))[j];
 		    }
+		    periodicCoords = true;
+		    break;
 		  }
+		}
 	      }
 
 	      if(!periodicCoords) {
diff --git a/AMDiS/src/FixVec.h b/AMDiS/src/FixVec.h
index 2277103d14a4190a8dca20cd099b1f2d4a54ae10..be835f0cf6e3138a1d40aab3bcea42f1f32b4d5a 100644
--- a/AMDiS/src/FixVec.h
+++ b/AMDiS/src/FixVec.h
@@ -82,7 +82,7 @@ namespace AMDiS {
     FixVec(int dim = -1, InitType initType = NO_INIT)
       : Vector<T>(calcSize(dim))
     { 
-      TEST_EXIT(initType == NO_INIT)("wrong initType or missing initializer\n");
+      TEST_EXIT_DBG(initType == NO_INIT)("wrong initType or missing initializer\n");
     }
 
     /** \brief
@@ -92,7 +92,7 @@ namespace AMDiS {
     FixVec(int dim, InitType initType, const T* ini)
       : Vector<T>(calcSize(dim))
     {
-      TEST_EXIT(initType == VALUE_LIST)("wrong initType or wrong initializer\n");
+      TEST_EXIT_DBG(initType == VALUE_LIST)("wrong initType or wrong initializer\n");
       setValues(ini);
     };
 
@@ -103,7 +103,7 @@ namespace AMDiS {
     FixVec(int dim, InitType initType, const T& ini)
       : Vector<T>(calcSize(dim))
     {
-      TEST_EXIT(initType == DEFAULT_VALUE)("wrong initType or wrong initializer\n");
+      TEST_EXIT_DBG(initType == DEFAULT_VALUE)("wrong initType or wrong initializer\n");
       this->set(ini);
     }
 
@@ -112,7 +112,6 @@ namespace AMDiS {
      */
     inline void init(int dim) 
     {
-      //TEST_EXIT(this->getSize() == 0)("already initialized\n");
       this->resize(calcSize(dim));
     };
 
@@ -121,7 +120,6 @@ namespace AMDiS {
      */
     inline void initSize(int size) 
     {
-      //TEST_EXIT(getSize() == 0)("already initialized\n");
       this->resize(size);
     };  
 
@@ -138,7 +136,6 @@ namespace AMDiS {
      */
     static int calcSize(int dim) {
       if (dim < 0) {
-	//TEST_EXIT(d==WORLD)("dimension needed\n");
 	return Global::getGeo(WORLD);
       } else {
 	return Global::getGeo(d, dim);
@@ -177,7 +174,7 @@ namespace AMDiS {
     VectorOfFixVecs(int dim, int size, InitType initType) 
       : size_(size)
     {
-      TEST_EXIT(initType == NO_INIT)("wrong initType or wrong initializer\n");
+      TEST_EXIT_DBG(initType == NO_INIT)("wrong initType or wrong initializer\n");
 
       vec = GET_MEMORY(FixVecType*, size_);
       for (FixVecType** i=&vec[0]; i < &vec[size_]; i++) {
@@ -193,7 +190,7 @@ namespace AMDiS {
     VectorOfFixVecs(int dim, int s, InitType initType, const FixVecType* ini)
       : size_(s)
     {
-      TEST_EXIT(initType == VALUE_LIST)("wrong initType or wrong initializer\n");
+      TEST_EXIT_DBG(initType == VALUE_LIST)("wrong initType or wrong initializer\n");
 
       vec = GET_MEMORY(FixVecType*, size_);
       for (FixVecType** i=&vec[0]; i < &vec[size_]; i++) {
@@ -209,7 +206,7 @@ namespace AMDiS {
     VectorOfFixVecs(int /*dim*/, int s, InitType initType, const FixVecType& ini)
       : size_(s)
     {
-      TEST_EXIT(initType==DEFAULT_VALUE)
+      TEST_EXIT_DBG(initType == DEFAULT_VALUE)
 	("wrong initType or wrong initializer\n");
       vec = GET_MEMORY(FixVecType*, size_);
       //vec = new FixVecType*[size];
@@ -248,7 +245,7 @@ namespace AMDiS {
      */
     inline const FixVecType& operator[](int index) const
     {
-      TEST_EXIT(index >= 0 && index < size_)("invalid index\n");
+      TEST_EXIT_DBG(index >= 0 && index < size_)("invalid index\n");
       return *(vec[index]);
     };
 
@@ -257,7 +254,7 @@ namespace AMDiS {
      */
     inline FixVecType& operator[](int index)
     {
-      TEST_EXIT(index >= 0 && index < size_)("invalid index\n");
+      TEST_EXIT_DBG(index >= 0 && index < size_)("invalid index\n");
       return *(vec[index]);
     };
 
@@ -267,7 +264,7 @@ namespace AMDiS {
     VectorOfFixVecs<FixVecType>& 
     operator=(const VectorOfFixVecs<FixVecType>& rhs)
     {
-      TEST_EXIT(size_==rhs.size_)("vectors of different size\n");
+      TEST_EXIT_DBG(size_ == rhs.size_)("vectors of different size\n");
       if (this!=&rhs) {
 	FixVecType **i, **j;
 	for(i=&vec[0], j=&(rhs.vec[0]); i < &vec[size_]; i++, j++) { 
@@ -326,9 +323,8 @@ namespace AMDiS {
     MatrixOfFixVecs(int dim, int r, int c, InitType initType)
       : rows(r), columns(c)
     {
-      TEST_EXIT(initType==NO_INIT)("wrong initType or wrong initializer\n");
+      TEST_EXIT_DBG(initType == NO_INIT)("wrong initType or wrong initializer\n");
       vec = GET_MEMORY(VectorOfFixVecs<FixVecType>*, rows);
-      //vec = new VectorOfFixVecs<FixVecType>*[rows];
       for(VectorOfFixVecs<FixVecType>** i=&vec[0]; i<&vec[rows]; i++) {
 	*i = NEW VectorOfFixVecs<FixVecType>(dim, columns, NO_INIT);
       }
@@ -351,7 +347,7 @@ namespace AMDiS {
      */
     inline VectorOfFixVecs<FixVecType >& operator[](int index)
     {
-      TEST_EXIT(index >= 0 && index < rows)("invalid index\n");
+      TEST_EXIT_DBG(index >= 0 && index < rows)("invalid index\n");
       return *(vec[index]);
     };
 
@@ -360,7 +356,7 @@ namespace AMDiS {
      */
     inline const VectorOfFixVecs<FixVecType >& operator[](int index) const
     {
-      TEST_EXIT(index >= 0 && index < rows)("invalid index\n");
+      TEST_EXIT_DBG(index >= 0 && index < rows)("invalid index\n");
       return *(vec[index]);
     };
 
@@ -463,7 +459,7 @@ namespace AMDiS {
     DimMat(int dim, InitType initType, const T& ini)
       : Matrix<T>(dim+1, dim+1)
     {
-      TEST_EXIT(initType==DEFAULT_VALUE)
+      TEST_EXIT_DBG(initType == DEFAULT_VALUE)
 	("wrong initType or wrong initializer\n");    
       this->set(ini);
     };
@@ -474,7 +470,7 @@ namespace AMDiS {
     DimMat(int dim, InitType initType, T* ini)
       : Matrix<T>(dim+1, dim+1)
     {
-      TEST_EXIT(initType==VALUE_LIST)("wrong initType or wrong initializer\n");
+      TEST_EXIT_DBG(initType == VALUE_LIST)("wrong initType or wrong initializer\n");
       setValues(ini);
     };
   };
@@ -576,7 +572,7 @@ namespace AMDiS {
     WorldMatrix(InitType initType, T* ini)
       : Matrix<T>(Global::getGeo(WORLD), Global::getGeo(WORLD))
     {
-      TEST_EXIT(initType == VALUE_LIST)("???\n");
+      TEST_EXIT_DBG(initType == VALUE_LIST)("???\n");
       setValues(ini);
     };
 
@@ -587,7 +583,7 @@ namespace AMDiS {
     WorldMatrix(InitType initType, const T& ini)
       : Matrix<T>(Global::getGeo(WORLD), Global::getGeo(WORLD))
     {
-      TEST_EXIT(initType == DEFAULT_VALUE)("wrong initType or wrong initializer\n");
+      TEST_EXIT_DBG(initType == DEFAULT_VALUE)("wrong initType or wrong initializer\n");
       this->set(ini);
     };
   
diff --git a/AMDiS/src/FixVec.hh b/AMDiS/src/FixVec.hh
index b07eeb0a53e08a452f0e5a92962acfc462d7d0c4..6536f374e170cf668133ae455d57bf027cc6c801 100644
--- a/AMDiS/src/FixVec.hh
+++ b/AMDiS/src/FixVec.hh
@@ -16,8 +16,8 @@ namespace AMDiS {
   void WorldVector<T>::multMatrixVec(WorldMatrix<T> &m, WorldVector<T> &v) 
   {
     FUNCNAME("WorldVector<T>::multMatrix()");
-    TEST_EXIT(m.getNumRows() == this->getSize())("invalide size\n");
-    TEST_EXIT(v.getSize() == this->getSize())("invalide size\n");
+    TEST_EXIT_DBG(m.getNumRows() == this->getSize())("invalide size\n");
+    TEST_EXIT_DBG(v.getSize() == this->getSize())("invalide size\n");
 
     T *mIt, *thisIt;
     for (thisIt = this->begin(), mIt = m.begin();
@@ -66,8 +66,8 @@ namespace AMDiS {
   {
     FUNCNAME("WorldMatrix<T>::vecProduct()");
 
-    TEST_EXIT(v1.getSize() == v2.getSize())("invalid size 1\n");
-    TEST_EXIT(v1.getSize() == this->getSize())("invalid size 2\n");
+    TEST_EXIT_DBG(v1.getSize() == v2.getSize())("invalid size 1\n");
+    TEST_EXIT_DBG(v1.getSize() == this->getSize())("invalid size 2\n");
 
     T *thisIt = this->begin();
 
diff --git a/AMDiS/src/Global.cc b/AMDiS/src/Global.cc
index ec0f6da8e1621cbadf54d6f52eb5f9a489dae5dc..bb734092d0a7a159e37c39ec1278f338150416c5 100644
--- a/AMDiS/src/Global.cc
+++ b/AMDiS/src/Global.cc
@@ -284,8 +284,8 @@ namespace AMDiS {
     // get dimension
     TEST_EXIT(Parameters::initialized())("Parameters not initialized!\n");
     Parameters::getGlobalParameter(0,"dimension of world","%d",&d);
-    TEST_EXIT(d>0)("can not initialize dimension\n");
-    TEST_EXIT((d==1)||(d==2)||(d==3))("Invalid world dimension %d!\n",d);
+    TEST_EXIT(d > 0)("can not initialize dimension\n");
+    TEST_EXIT((d == 1) || (d == 2) || (d == 3))("Invalid world dimension %d!\n",d);
 
     // set dimension
     dimOfWorld = d;
diff --git a/AMDiS/src/Global.h b/AMDiS/src/Global.h
index 97cf65717dd55d4aba4d2bba31fba8ada4d79cb1..8d5358519b3f251b2996fbcf3e92fe400ad67230 100644
--- a/AMDiS/src/Global.h
+++ b/AMDiS/src/Global.h
@@ -189,6 +189,11 @@ namespace AMDiS {
      */
     static void print_error_exit(const char *format, ...);
 
+    /** \brief
+     *
+     */
+    static void catch_error_exit(const char *format, ...) {};
+
     /** \brief
      * Prints an error message with funcname, file, and line to the error stream
      */
@@ -337,10 +342,20 @@ namespace AMDiS {
    */
 #define TEST(test) if ((test));else ERROR
 
+
   /** \brief 
    * if test is false, an error message is printed and the program exits
    */
-#define TEST_EXIT(test) if ((test));else ERROR_EXIT
+#define TEST_EXIT(test) 
+
+  /** \brief
+   * In debug mode, it corresponds to ERROR_EXIT, otherwise it is noop.
+   */
+#if (DEBUG == 0) 
+  #define TEST_EXIT_DBG(test) if (false) Msg::catch_error_exit
+#else
+#define TEST_EXIT_DBG(test) if ((test));else ERROR_EXIT
+#endif
 
   /** \brief 
    * prints a message
diff --git a/AMDiS/src/InterpolRestrictMatrix.cc b/AMDiS/src/InterpolRestrictMatrix.cc
index 2a2bf26df9d2004cbc658e1d8adae5464428fb05..816453d67467365346e102bbf3315fe39fd914da 100644
--- a/AMDiS/src/InterpolRestrictMatrix.cc
+++ b/AMDiS/src/InterpolRestrictMatrix.cc
@@ -153,13 +153,13 @@ namespace AMDiS {
       fillMemory();
     }
 
-    TEST_EXIT(src)("src not set\n");
-    TEST_EXIT(dest)("dest not set\n");
-    TEST_EXIT(src->getFESpace() == dest->getFESpace())("invalid feSpaces\n");
+    TEST_EXIT_DBG(src)("src not set\n");
+    TEST_EXIT_DBG(dest)("dest not set\n");
+    TEST_EXIT_DBG(src->getFESpace() == dest->getFESpace())("invalid feSpaces\n");
 
     const FiniteElemSpace *feSpace = src->getFESpace();
 
-    TEST_EXIT(feSpace->getBasisFcts()->getNumber() == numFcts_)
+    TEST_EXIT_DBG(feSpace->getBasisFcts()->getNumber() == numFcts_)
       ("invalid number of basis functions\n");
 
     // do matrix vector multiplication
@@ -289,7 +289,7 @@ namespace AMDiS {
 						 int coarseLevel)
   {
     FUNCNAME("InterpolRestrictMatrix::assembleDOFMatrix()");
-    TEST_EXIT(dest)("dest not set\n");
+    TEST_EXIT_DBG(dest)("dest not set\n");
     
     if(!initialized_) {
       initialized_ = true;
@@ -300,7 +300,7 @@ namespace AMDiS {
 
     const FiniteElemSpace *feSpace = dest->getRowFESpace();
 
-    TEST_EXIT(feSpace->getBasisFcts()->getNumber() == numFcts_)
+    TEST_EXIT_DBG(feSpace->getBasisFcts()->getNumber() == numFcts_)
       ("invalid number of basis functions\n");
 
     DOFVector<int> visitedRowDOFs(feSpace, "visited row DOFs");
diff --git a/AMDiS/src/Lagrange.cc b/AMDiS/src/Lagrange.cc
index 3df2274bf7e1c5d8c8cb0d6c4858aea850fa722e..24b68185491d86490cfc39d4681279cdcf1b528b 100644
--- a/AMDiS/src/Lagrange.cc
+++ b/AMDiS/src/Lagrange.cc
@@ -204,7 +204,7 @@ namespace AMDiS {
 			     GeoIndex position, int positionIndex, int nodeIndex, 
 			     int** vertices)
   {
-    TEST_EXIT((*vertices)==NULL)("vertices != NULL\n");
+    TEST_EXIT_DBG((*vertices)==NULL)("vertices != NULL\n");
     int dimOfPosition = DIM_OF_INDEX(position, dim);
 
     *vertices = GET_MEMORY(int, dimOfPosition + 1);
@@ -277,11 +277,11 @@ namespace AMDiS {
 	func = phi2v;
 	break;
       case EDGE:
-	TEST_EXIT(owner->getDim() > 1)("no edge in 1d\n");
+	TEST_EXIT_DBG(owner->getDim() > 1)("no edge in 1d\n");
 	func = phi2e;
 	break;
       case CENTER:
-	TEST_EXIT(owner->getDim() == 1)("no center dofs for dim != 1\n");
+	TEST_EXIT_DBG(owner->getDim() == 1)("no center dofs for dim != 1\n");
 	func = phi2e;
 	break;
       default:
@@ -297,7 +297,7 @@ namespace AMDiS {
 	func = phi3e;
 	break;
       case FACE:
-	TEST_EXIT(owner->getDim() >= 3)("no faces in dim < 3\n");
+	TEST_EXIT_DBG(owner->getDim() >= 3)("no faces in dim < 3\n");
 	func = phi3f;
 	break;
       case CENTER:
@@ -329,7 +329,7 @@ namespace AMDiS {
 	  func = phi4e0;
 	break;
       case FACE:
-	TEST_EXIT(owner->getDim() >= 3)("no faces in dim < 3\n");
+	TEST_EXIT_DBG(owner->getDim() >= 3)("no faces in dim < 3\n");
 	func = phi4f;      
 	break;
       case CENTER:
@@ -408,7 +408,7 @@ namespace AMDiS {
 	func = grdPhi2e;
 	break;
       case CENTER:
-	TEST_EXIT(owner->getDim() == 1)("no center dofs for dim != 1\n");
+	TEST_EXIT_DBG(owner->getDim() == 1)("no center dofs for dim != 1\n");
 	func = grdPhi2e;
 	break;
       default:
@@ -424,7 +424,7 @@ namespace AMDiS {
 	func = grdPhi3e;
 	break;
       case FACE:
-	TEST_EXIT(owner->getDim() >= 3)("no faces in dim < 3\n");
+	TEST_EXIT_DBG(owner->getDim() >= 3)("no faces in dim < 3\n");
 	func = grdPhi3f;
 	break;
       case CENTER:
@@ -456,7 +456,7 @@ namespace AMDiS {
 	  func = grdPhi4e0;
 	break;
       case FACE:
-	TEST_EXIT(owner->getDim() >= 3)("no faces in dim < 3\n");
+	TEST_EXIT_DBG(owner->getDim() >= 3)("no faces in dim < 3\n");
 	func = grdPhi4f;      
 	break;
       case CENTER:
@@ -529,11 +529,11 @@ namespace AMDiS {
 	func = D2Phi2v;
 	break;
       case EDGE:
-	TEST_EXIT(owner->getDim() > 1)("no edge in 1d\n");
+	TEST_EXIT_DBG(owner->getDim() > 1)("no edge in 1d\n");
 	func = D2Phi2e;
 	break;
       case CENTER:
-	TEST_EXIT(owner->getDim() == 1)("no center dofs for dim != 1\n");
+	TEST_EXIT_DBG(owner->getDim() == 1)("no center dofs for dim != 1\n");
 	func = D2Phi2e;
 	break;
       default:
@@ -549,7 +549,7 @@ namespace AMDiS {
 	func = D2Phi3e;
 	break;
       case FACE:
-	TEST_EXIT(owner->getDim() >= 3)("no faces in dim < 3\n");
+	TEST_EXIT_DBG(owner->getDim() >= 3)("no faces in dim < 3\n");
 	func = D2Phi3f;
 	break;
       case CENTER:
@@ -581,7 +581,7 @@ namespace AMDiS {
 	  func = D2Phi4e0;
 	break;
       case FACE:
-	TEST_EXIT(owner->getDim() >= 3)("no faces in dim < 3\n");
+	TEST_EXIT_DBG(owner->getDim() >= 3)("no faces in dim < 3\n");
 	func = D2Phi4f;      
 	break;
       case CENTER:
@@ -722,7 +722,7 @@ namespace AMDiS {
 	  indi = orderOfPositionIndices(el, INDEX_OF_DIM(i, dim), j);
 	  // for all dofs
 	  for(int k=0; k < (*nDOF)[position]; k++) {  
-	    TEST_EXIT(indi)("indi == NULL\n");
+	    TEST_EXIT_DBG(indi)("indi == NULL\n");
 	    result[counter++] = el->getDOF(firstNode + j, n0 + indi[k]);
 	  }
 	}
@@ -868,7 +868,7 @@ namespace AMDiS {
       result[index++] = INTERIOR;
     }
 
-    TEST_EXIT(index == nBasFcts)("found not enough boundarys\n");
+    TEST_EXIT_DBG(index == nBasFcts)("found not enough boundarys\n");
 
     return result;
   }
@@ -1068,10 +1068,10 @@ namespace AMDiS {
     const DegreeOfFreedom  *dof;
     const Parametric *parametric;
 
-    TEST_EXIT(fh)("no DOF_REAL_VEC fh\n");
-    TEST_EXIT(fh->getFESpace())("no fe_space in DOF_REAL_VEC %s\n",
+    TEST_EXIT_DBG(fh)("no DOF_REAL_VEC fh\n");
+    TEST_EXIT_DBG(fh->getFESpace())("no fe_space in DOF_REAL_VEC %s\n",
 				fh->getName().c_str());
-    TEST_EXIT(fh->getFESpace()->getBasisFcts() == this)("wrong basis fcts for fh\n");
+    TEST_EXIT_DBG(fh->getFESpace()->getBasisFcts() == this)("wrong basis fcts for fh\n");
 
     Mesh* mesh = fh->getFESpace()->getMesh();
 
@@ -1353,7 +1353,7 @@ namespace AMDiS {
 	if (list->getNeighbourElement(i, 1)  &&  list->getNeighbourNr(i, 1) < i)
 	  lr_set += 2;
 
-	TEST_EXIT(lr_set)("no values set on both neighbours\n");
+	TEST_EXIT_DBG(lr_set)("no values set on both neighbours\n");
 
 	/****************************************************************************/
 	/*  values on child[0]                                                      */
@@ -1696,7 +1696,7 @@ namespace AMDiS {
 	if (list->getNeighbourElement(i, 1)  &&  list->getNeighbourNr(i, 1) < i)
 	  lr_set += 2;
 
-	TEST_EXIT(lr_set)("no values set on both neighbours\n");
+	TEST_EXIT_DBG(lr_set)("no values set on both neighbours\n");
 
 	/****************************************************************************/
 	/*  values on child[0]                                                      */
@@ -1759,7 +1759,7 @@ namespace AMDiS {
 	      {
 	      case 1:
 		cdi = el->getChild(1)->getDOF(node0+1, n0);      
-		TEST_EXIT(cdi == cd[17])("cdi != cd[17]\n");
+		TEST_EXIT_DBG(cdi == cd[17])("cdi != cd[17]\n");
 		(*drv)[cdi] = 
 		  (0.0625*((*drv)[pd[0]] - (*drv)[pd[1]])
 		   + 0.1875*(-(*drv)[pd[4]] + (*drv)[pd[5]]) - 0.125*(*drv)[pd[6]]
@@ -1767,7 +1767,7 @@ namespace AMDiS {
 		break;
 	      case 2:
 		cdi = el->getChild(1)->getDOF(node0+2, n0);      
-		TEST_EXIT(cdi == cd[18])("cdi != cd[18]\n");
+		TEST_EXIT_DBG(cdi == cd[18])("cdi != cd[18]\n");
 		(*drv)[cdi] = 
 		  (0.0625*((*drv)[pd[0]] - (*drv)[pd[1]])
 		   + 0.1875*(-(*drv)[pd[4]] + (*drv)[pd[5]]) - 0.125*(*drv)[pd[8]]
@@ -1781,7 +1781,7 @@ namespace AMDiS {
 	      {
 	      case 1:
 		cdi = el->getChild(1)->getDOF(node0+2, n0);      
-		TEST_EXIT(cdi == cd[18])("cdi != cd[18]\n");
+		TEST_EXIT_DBG(cdi == cd[18])("cdi != cd[18]\n");
 		(*drv)[cdi] = 
 		  (0.0625*((*drv)[pd[0]] - (*drv)[pd[1]])
 		   + 0.1875*(-(*drv)[pd[4]] + (*drv)[pd[5]]) - 0.125*(*drv)[pd[6]]
@@ -1789,7 +1789,7 @@ namespace AMDiS {
 		break;
 	      case 2:
 		cdi = el->getChild(1)->getDOF(node0+1, n0);      
-		TEST_EXIT(cdi == cd[17])("cdi != cd[17]\n");
+		TEST_EXIT_DBG(cdi == cd[17])("cdi != cd[17]\n");
 		(*drv)[cdi] = 
 		  (0.0625*((*drv)[pd[0]] - (*drv)[pd[1]])
 		   + 0.1875*(-(*drv)[pd[4]] + (*drv)[pd[5]]) - 0.125*(*drv)[pd[8]]
@@ -2355,7 +2355,7 @@ namespace AMDiS {
 	if (list->getNeighbourElement(i, 1)  &&  list->getNeighbourNr(i, 1) < i)
 	  lr_set += 2;
 
-	TEST_EXIT(lr_set)("no values set on both neighbours\n");
+	TEST_EXIT_DBG(lr_set)("no values set on both neighbours\n");
 
 	/****************************************************************************/
 	/*  values on child[0]                                                      */
@@ -2883,7 +2883,7 @@ namespace AMDiS {
 	if (list->getNeighbourElement(i,1)  &&  list->getNeighbourNr(i,1) < i)
 	  lr_set += 2;
 
-	TEST_EXIT(lr_set)("no values set on both neighbours\n");
+	TEST_EXIT_DBG(lr_set)("no values set on both neighbours\n");
 
 	/****************************************************************************/
 	/*  values on child[0]                                                      */
@@ -3281,7 +3281,7 @@ namespace AMDiS {
 	if (list->getNeighbourElement(i, 1) &&  list->getNeighbourNr(i, 1) < i)
 	  lr_set += 2;
 
-	TEST_EXIT(lr_set)("no values set on both neighbours\n");
+	TEST_EXIT_DBG(lr_set)("no values set on both neighbours\n");
 
 	/****************************************************************************/
 	/*  values on child[0]                                                      */
@@ -3364,7 +3364,7 @@ namespace AMDiS {
 	      {
 	      case 1:
 		cdi = el->getChild(1)->getDOF(node0+1, n0);      
-		TEST_EXIT(cdi == cd[17])("cdi != cd[17]\n");
+		TEST_EXIT_DBG(cdi == cd[17])("cdi != cd[17]\n");
 		(*drv)[pd[0]] += 0.0625*(*drv)[cdi];
 		(*drv)[pd[1]] += -0.0625*(*drv)[cdi];
 		(*drv)[pd[4]] += -0.1875*(*drv)[cdi];
@@ -3375,7 +3375,7 @@ namespace AMDiS {
 		break;
 	      case 2:
 		cdi = el->getChild(1)->getDOF(node0+2, n0);      
-		TEST_EXIT(cdi == cd[18])("cdi != cd[18]\n");
+		TEST_EXIT_DBG(cdi == cd[18])("cdi != cd[18]\n");
 		(*drv)[pd[0]] += 0.0625*(*drv)[cdi];
 		(*drv)[pd[1]] += -0.0625*(*drv)[cdi];
 		(*drv)[pd[4]] += -0.1875*(*drv)[cdi];
@@ -3392,7 +3392,7 @@ namespace AMDiS {
 	      {
 	      case 1:
 		cdi = el->getChild(1)->getDOF(node0+2, n0);      
-		TEST_EXIT(cdi == cd[18])("cdi != cd[18]\n");
+		TEST_EXIT_DBG(cdi == cd[18])("cdi != cd[18]\n");
 		(*drv)[pd[0]] += 0.0625*(*drv)[cdi];
 		(*drv)[pd[1]] += -0.0625*(*drv)[cdi];
 		(*drv)[pd[4]] += -0.1875*(*drv)[cdi];
@@ -3403,7 +3403,7 @@ namespace AMDiS {
 		break;
 	      case 2:
 		cdi = el->getChild(1)->getDOF(node0+1, n0);      
-		TEST_EXIT(cdi == cd[17])("cdi != cd[17]\n");
+		TEST_EXIT_DBG(cdi == cd[17])("cdi != cd[17]\n");
 		(*drv)[pd[0]] += 0.0625*(*drv)[cdi];
 		(*drv)[pd[1]] += -0.0625*(*drv)[cdi];
 		(*drv)[pd[4]] += -0.1875*(*drv)[cdi];
@@ -4047,7 +4047,7 @@ namespace AMDiS {
 	if (list->getNeighbourElement(i,1) &&  list->getNeighbourNr(i,1) < i)
 	  lr_set += 2;
 
-	TEST_EXIT(lr_set)("no values set on both neighbours\n");
+	TEST_EXIT_DBG(lr_set)("no values set on both neighbours\n");
 
 	/****************************************************************************/
 	/*  values on child[0]                                                      */
@@ -4883,7 +4883,7 @@ namespace AMDiS {
 	if (list->getNeighbourElement(i, 1)  &&  list->getNeighbourNr(i, 1) < i)
 	  lr_set += 2;
 
-	TEST_EXIT(lr_set)("no values set on both neighbours\n");
+	TEST_EXIT_DBG(lr_set)("no values set on both neighbours\n");
 
 	switch(lr_set)
 	  {
@@ -5148,7 +5148,7 @@ namespace AMDiS {
 	if (list->getNeighbourElement(i,1) &&  list->getNeighbourNr(i,1) < i)
 	  lr_set += 2;
 
-	TEST_EXIT(lr_set)("no values set on both neighbours\n");
+	TEST_EXIT_DBG(lr_set)("no values set on both neighbours\n");
 
 	/****************************************************************************/
 	/*  values on child[0]                                                      */
diff --git a/AMDiS/src/LeafData.cc b/AMDiS/src/LeafData.cc
index b21899031c827b12f4903ca6ece416619cdbd451..1d4b868157de7fde9ae47706117ec31ecf417ed3 100644
--- a/AMDiS/src/LeafData.cc
+++ b/AMDiS/src/LeafData.cc
@@ -4,378 +4,218 @@
 
 namespace AMDiS {
 
-bool LeafDataEstimatable::refineElementData(Element* parent, 
-					    Element* child1,
-					    Element* child2,
-					    int elType)
+  bool LeafDataEstimatable::refineElementData(Element* parent, 
+					      Element* child1,
+					      Element* child2,
+					      int elType)
  
-{
-  ElementData::refineElementData(parent, child1, child2, elType);
+  {
+    ElementData::refineElementData(parent, child1, child2, elType);
 
-  LeafDataEstimatable *child1Data = 
-    NEW LeafDataEstimatable(child1->getElementData());
-  LeafDataEstimatable *child2Data = 
-    NEW LeafDataEstimatable(child2->getElementData());
+    LeafDataEstimatable *child1Data = 
+      NEW LeafDataEstimatable(child1->getElementData());
+    LeafDataEstimatable *child2Data = 
+      NEW LeafDataEstimatable(child2->getElementData());
 
-  child1Data->setErrorEstimate(0, errorEstimate / 2.0);
-  child2Data->setErrorEstimate(0, errorEstimate / 2.0);
+    child1Data->setErrorEstimate(0, errorEstimate / 2.0);
+    child2Data->setErrorEstimate(0, errorEstimate / 2.0);
 
-  child1->setElementData(child1Data);
-  child2->setElementData(child2Data);
+    child1->setElementData(child1Data);
+    child2->setElementData(child2Data);
 
-  return true;
-}
+    return true;
+  }
 
-void LeafDataEstimatable::coarsenElementData(Element* parent, 
-					     Element* thisChild,
-					     Element* otherChild,
-					     int elTypeParent)
+  void LeafDataEstimatable::coarsenElementData(Element* parent, 
+					       Element* thisChild,
+					       Element* otherChild,
+					       int elTypeParent)
  
-{
-  TEST_EXIT(otherChild->deleteElementData(ESTIMATABLE))
-    ("couldn't delete LeafDataEstimatable at otherChild");
-  parent->setElementData(NEW LeafDataEstimatable(parent->getElementData()));
-  ElementData::coarsenElementData(parent, thisChild, otherChild, elTypeParent);
-}
+  {
+    bool test = otherChild->deleteElementData(ESTIMATABLE);
+    TEST_EXIT_DBG(test)("couldn't delete LeafDataEstimatable at otherChild");
+
+    parent->setElementData(NEW LeafDataEstimatable(parent->getElementData()));
+    ElementData::coarsenElementData(parent, thisChild, otherChild, elTypeParent);
+  }
 
-bool LeafDataEstimatableVec::refineElementData(Element* parent, 
-					       Element* child1,
-					       Element* child2,
-					       int elType)
+  bool LeafDataEstimatableVec::refineElementData(Element* parent, 
+						 Element* child1,
+						 Element* child2,
+						 int elType)
  
-{
-  ElementData::refineElementData(parent, child1, child2, elType);
-  //int size = dynamic_cast<int>(errorEstimate.size());
-  child1->setElementData(NEW LeafDataEstimatableVec(//size,
-						    child1->getElementData()));
-  child2->setElementData(NEW LeafDataEstimatableVec(//size,
-						    child2->getElementData()));
-
-  return true;
-}
+  {
+    ElementData::refineElementData(parent, child1, child2, elType);
+    child1->setElementData(NEW LeafDataEstimatableVec(child1->getElementData()));
+    child2->setElementData(NEW LeafDataEstimatableVec(child2->getElementData()));
 
-void LeafDataEstimatableVec::coarsenElementData(Element* parent, 
-						Element* thisChild,
-						Element* otherChild,
-						int elTypeParent)
+    return true;
+  }
+
+  void LeafDataEstimatableVec::coarsenElementData(Element* parent, 
+						  Element* thisChild,
+						  Element* otherChild,
+						  int elTypeParent)
  
-{
-  TEST_EXIT(otherChild->deleteElementData(ESTIMATABLE))
-    ("couldn't delete LeafDataEstimatableVec at otherChild");
-  //int size = errorEstimate.getSize();
-  parent->setElementData(NEW LeafDataEstimatableVec(//size,
-						    parent->getElementData()));
-  ElementData::coarsenElementData(parent, thisChild, otherChild, elTypeParent);
-}
+  {
+    bool test = otherChild->deleteElementData(ESTIMATABLE);
+    TEST_EXIT_DBG(test)("couldn't delete LeafDataEstimatableVec at otherChild");
 
-bool LeafDataCoarsenable::refineElementData(Element* parent, 
-					    Element* child1,
-					    Element* child2,
-					    int elType)
- {
-  ElementData::refineElementData(parent, child1, child2, elType);
-  child1->setElementData(NEW LeafDataCoarsenable(child1->getElementData()));
-  child2->setElementData(NEW LeafDataCoarsenable(child2->getElementData()));
-  return true;
-}
+    parent->setElementData(NEW LeafDataEstimatableVec(parent->getElementData()));
+    ElementData::coarsenElementData(parent, thisChild, otherChild, elTypeParent);
+  }
 
-void LeafDataCoarsenable::coarsenElementData(Element* parent, 
-					     Element* thisChild,
-					     Element* otherChild,
-					     int elTypeParent)
-{
-  TEST_EXIT(otherChild->deleteElementData(COARSENABLE))
-    ("couldn't delete LeafDataCoarsenable at otherChild");
-  parent->setElementData(NEW LeafDataCoarsenable(parent->getElementData()));
-  ElementData::coarsenElementData(parent, thisChild, otherChild, elTypeParent);
-}
+  bool LeafDataCoarsenable::refineElementData(Element* parent, 
+					      Element* child1,
+					      Element* child2,
+					      int elType)
+  {
+    ElementData::refineElementData(parent, child1, child2, elType);
+    child1->setElementData(NEW LeafDataCoarsenable(child1->getElementData()));
+    child2->setElementData(NEW LeafDataCoarsenable(child2->getElementData()));
+    return true;
+  }
 
-bool LeafDataCoarsenableVec::refineElementData(Element* parent, 
-					       Element* child1,
-					       Element* child2,
-					       int elType)
-{
-  ElementData::refineElementData(parent, child1, child2, elType);
-  child1->setElementData(NEW LeafDataCoarsenableVec(child1->getElementData()));
-  child2->setElementData(NEW LeafDataCoarsenableVec(child2->getElementData()));
-  return true;
-}
+  void LeafDataCoarsenable::coarsenElementData(Element* parent, 
+					       Element* thisChild,
+					       Element* otherChild,
+					       int elTypeParent)
+  {
+    bool test = otherChild->deleteElementData(COARSENABLE);
+    TEST_EXIT_DBG(test)("couldn't delete LeafDataCoarsenable at otherChild");
 
-void LeafDataCoarsenableVec::coarsenElementData(Element* parent, 
-						Element* thisChild,
-						Element* otherChild,
-						int elTypeParent) 
-{
-  TEST_EXIT(otherChild->deleteElementData(COARSENABLE))
-    ("couldn't delete LeafDataCoarsenableVec at otherChild");
-  parent->setElementData(NEW LeafDataCoarsenableVec(parent->getElementData()));
-  ElementData::coarsenElementData(parent, thisChild, otherChild, elTypeParent);
-}
+    parent->setElementData(NEW LeafDataCoarsenable(parent->getElementData()));
+    ElementData::coarsenElementData(parent, thisChild, otherChild, elTypeParent);
+  }
 
-bool LeafDataPeriodic::refineElementData(Element* parent, 
-					 Element* child1,
-					 Element* child2,
-					 int elType) 
-{
-  ElementData::refineElementData(parent, child1, child2, elType);
+  bool LeafDataCoarsenableVec::refineElementData(Element* parent, 
+						 Element* child1,
+						 Element* child2,
+						 int elType)
+  {
+    ElementData::refineElementData(parent, child1, child2, elType);
+    child1->setElementData(NEW LeafDataCoarsenableVec(child1->getElementData()));
+    child2->setElementData(NEW LeafDataCoarsenableVec(child2->getElementData()));
+    return true;
+  }
+
+  void LeafDataCoarsenableVec::coarsenElementData(Element* parent, 
+						  Element* thisChild,
+						  Element* otherChild,
+						  int elTypeParent) 
+  {
+    bool test = otherChild->deleteElementData(COARSENABLE);
+    TEST_EXIT(test)("couldn't delete LeafDataCoarsenableVec at otherChild");
+    parent->setElementData(NEW LeafDataCoarsenableVec(parent->getElementData()));
+    ElementData::coarsenElementData(parent, thisChild, otherChild, elTypeParent);
+  }
 
-  int i, j;
+  bool LeafDataPeriodic::refineElementData(Element* parent, 
+					   Element* child1,
+					   Element* child2,
+					   int elType) 
+  {
+    ElementData::refineElementData(parent, child1, child2, elType);
 
-  Element* child[2] = {child1, child2};
+    int i, j;
 
-  int dim = parent->getMesh()->getDim();
+    Element* child[2] = {child1, child2};
 
-  LeafDataPeriodic *ld[2] = {NULL, NULL};
+    int dim = parent->getMesh()->getDim();
 
-  ::std::list<LeafDataPeriodic::PeriodicInfo>::iterator it;
+    LeafDataPeriodic *ld[2] = {NULL, NULL};
 
-  for(it = periodicInfoList.begin();
-      it != periodicInfoList.end();
-      ++it)
-  {
-    BoundaryType type = it->type;
+    ::std::list<LeafDataPeriodic::PeriodicInfo>::iterator it;
 
-    int parentSide = it->elementSide;
+    for(it = periodicInfoList.begin();
+	it != periodicInfoList.end();
+	++it)
+      {
+	BoundaryType type = it->type;
+
+	int parentSide = it->elementSide;
     
-    int mode = it->periodicMode;
+	int mode = it->periodicMode;
 
-    // for both children
-    for(i=0; i < 2; i++) {
+	// for both children
+	for(i=0; i < 2; i++) {
 
-      // get childs side
-      int sideOfChild = parent->getSideOfChild(i, parentSide, elType);
-      if(sideOfChild == -1) continue;
+	  // get childs side
+	  int sideOfChild = parent->getSideOfChild(i, parentSide, elType);
+	  if(sideOfChild == -1) continue;
 
-      // create new leaf data if necessary
-      if(!ld[i]) {
-	ld[i] = NEW LeafDataPeriodic(child[i]->getElementData());
-	//ld[i]->newDOF = newDOF;
-	child[i]->setElementData(ld[i]);
-      }
+	  // create new leaf data if necessary
+	  if(!ld[i]) {
+	    ld[i] = NEW LeafDataPeriodic(child[i]->getElementData());
+	    child[i]->setElementData(ld[i]);
+	  }
     
-      // create new periodic coords
-      DimVec<WorldVector<double> > coords(dim-1, NO_INIT);
-
-      // create new periodic dofs
-      //DimVec<DegreeOfFreedom> dofs(dim-1, DEFAULT_VALUE, -1);
-
-      // for each vertex of childs side
-      for(j=0; j < dim; j++) {
-	// get parents vertex nr.
-	int childVertex = child[i]->getVertexOfPosition(INDEX_OF_DIM(dim-1,dim),
-							sideOfChild,
-							j);
-	int parentVertex = child[i]->getVertexOfParent(i, childVertex, elType);
+	  // create new periodic coords
+	  DimVec<WorldVector<double> > coords(dim-1, NO_INIT);
+
+	  // for each vertex of childs side
+	  for(j=0; j < dim; j++) {
+	    // get parents vertex nr.
+	    int childVertex = child[i]->getVertexOfPosition(INDEX_OF_DIM(dim-1,dim),
+							    sideOfChild,
+							    j);
+	    int parentVertex = child[i]->getVertexOfParent(i, childVertex, elType);
 	
-	if(parentVertex == -1) {
-	  // create coords for new vertex
-	  WorldVector<double> newCoords;
-	  newCoords = (*(it->periodicCoords))[0];
-	  newCoords += (*(it->periodicCoords))[1];
-	  newCoords *= 0.5;
-	  coords[j] = newCoords;
-	  //dofs[j] = newDOF;
-	  //TEST_EXIT(newDOF != -1)("newDOF not set\n");
-	} else {
-	  int posAtSide = parent->getPositionOfVertex(parentSide, 
-						      parentVertex);
-	  coords[j] = (*(it->periodicCoords))[posAtSide];
-	  //dofs[j] = it->periodicDOFs[posAtSide];
+	    if(parentVertex == -1) {
+	      // create coords for new vertex
+	      WorldVector<double> newCoords;
+	      newCoords = (*(it->periodicCoords))[0];
+	      newCoords += (*(it->periodicCoords))[1];
+	      newCoords *= 0.5;
+	      coords[j] = newCoords;
+	    } else {
+	      int posAtSide = parent->getPositionOfVertex(parentSide, 
+							  parentVertex);
+	      coords[j] = (*(it->periodicCoords))[posAtSide];
+	    }
+	  }
+
+	  ld[i]->addPeriodicInfo(mode, type, sideOfChild, &coords);
 	}
       }
 
-      ld[i]->addPeriodicInfo(mode, type, sideOfChild, &coords);
-
-//       MSG("parent %d, child%d %d, periodic dofs %d %d\n",
-// 	  parent->getIndex(),
-// 	  i,
-// 	  child[i]->getIndex(),
-// 	  dofs[0], dofs[1]);
-    }
+    return false;
   }
 
-  return false;
-}
-
-LeafDataPeriodic::PeriodicInfo::PeriodicInfo(const PeriodicInfo &rhs) 
-{
-  periodicMode = rhs.periodicMode;
-  type = rhs.type;
-  elementSide = rhs.elementSide;
-  int i, dim;
-  if(rhs.periodicCoords) {
-    dim = rhs.periodicCoords->getSize() - 1;
-    periodicCoords = NEW DimVec<WorldVector<double> >(dim, NO_INIT);
-    for(i = 0; i < dim + 1; i++) {
-      (*periodicCoords)[i] = (*(rhs.periodicCoords))[i];
-    }
+  LeafDataPeriodic::PeriodicInfo::PeriodicInfo(const PeriodicInfo &rhs) 
+  {
+    periodicMode = rhs.periodicMode;
+    type = rhs.type;
+    elementSide = rhs.elementSide;
+    int i, dim;
+    if(rhs.periodicCoords) {
+      dim = rhs.periodicCoords->getSize() - 1;
+      periodicCoords = NEW DimVec<WorldVector<double> >(dim, NO_INIT);
+      for(i = 0; i < dim + 1; i++) {
+	(*periodicCoords)[i] = (*(rhs.periodicCoords))[i];
+      }
     
-  } else {
-    periodicCoords = NULL;
+    } else {
+      periodicCoords = NULL;
+    }
   }
-}
 
-LeafDataPeriodic::PeriodicInfo::PeriodicInfo(int mode,
-					     BoundaryType t,
-					     int side,
-					     const DimVec<WorldVector<double> > *coords)
-  : periodicMode(mode),
-    type(t),
-    elementSide(side),
-    periodicCoords(NULL)
-{
-  int i, dim;
-  if(coords) {
-    dim = coords->getSize() - 1;
-    periodicCoords = NEW DimVec<WorldVector<double> >(dim, NO_INIT);
-    for(i = 0; i < dim + 1; i++) {
-      (*periodicCoords)[i] = (*coords)[i];
+  LeafDataPeriodic::PeriodicInfo::PeriodicInfo(int mode,
+					       BoundaryType t,
+					       int side,
+					       const DimVec<WorldVector<double> > *coords)
+    : periodicMode(mode),
+      type(t),
+      elementSide(side),
+      periodicCoords(NULL)
+  {
+    int i, dim;
+    if(coords) {
+      dim = coords->getSize() - 1;
+      periodicCoords = NEW DimVec<WorldVector<double> >(dim, NO_INIT);
+      for(i = 0; i < dim + 1; i++) {
+	(*periodicCoords)[i] = (*coords)[i];
+      }
     }
   }
 }
-
-// void LeafDataPeriodicRefinable::refineLeafData(Element* parent, 
-// 					       Element* child1,
-// 					       Element* child2) 
-// {
-//   if(decoratedLeafData) {
-//     LeafDataPeriodic *ldp = 
-//       (LeafDataPeriodic*) decoratedLeafData->getDecoratedLeafData(PERIODIC);
-//     TEST_EXIT(ldp)("no periodic leaf data\n");
-
-//     LeafDataRefinable *ldr = (LeafDataRefinable*)
-//       decoratedLeafData->getDecoratedLeafData(REFINABLE);
-//     if(ldr) {
-//       ldr->refineLeafData(parent, child1, child2);
-//     }
-
-//     int dim = parent->getMesh()->getDim();
-
-//     LeafDataPeriodic *ld1 = NULL;
-//     LeafDataPeriodic *ld2 = NULL;
-
-//     ::std::list<LeafDataPeriodic::PeriodicInfo>::iterator it;
-
-//     switch(dim) {
-//     case 1:  // ----- dim = 1 -----
-//       // for each periodic info
-//       for(it = ldp->periodicInfoList.begin();
-// 	  it != ldp->periodicInfoList.end();
-// 	  ++it)
-//       {
-// 	switch(it->elementSide) {
-// 	case 0: // ----- side 0 -----
-// 	  if(!ld1)
-// 	    ld1 = NEW LeafDataPeriodic(child1->getLeafData());
-// 	  ld1->addPeriodicInfo(0, it->periodicCoords);
-// 	  child1->setLeafData(NEW LeafDataPeriodicRefinable
-// 			      (NEW LeafDataPeriodicCoarsenable(ld1))
-// 			     );
-// 	  break;
-// 	case 1: // ----- side 1 -----
-// 	  if(!ld2)
-// 	    ld2 = NEW LeafDataPeriodic(child2->getLeafData());
-// 	  ld2->addPeriodicInfo(0, it->periodicCoords);
-// 	  child2->setLeafData(NEW LeafDataPeriodicRefinable
-// 			      (NEW LeafDataPeriodicCoarsenable(ld2))
-// 			     );
-// 	  break;
-// 	default: ERROR_EXIT("invalid element side\n");
-// 	}
-//       }
-//       break;
-//     case 2:  // ----- dim = 2 -----
-//       // for each periodic info
-//       for(it = ldp->periodicInfoList.begin();
-// 	  it != ldp->periodicInfoList.end();
-// 	  ++it)
-//       {
-// 	switch(it->elementSide) {
-// 	case 0: // ----- side 0 -----
-// 	  if(!ld2)
-// 	    ld2 = NEW LeafDataPeriodic(child2->getLeafData());
-// 	  ld2->addPeriodicInfo(2, it->periodicCoords);
-// 	  child2->setLeafData(NEW LeafDataPeriodicRefinable
-// 			      (NEW LeafDataPeriodicCoarsenable(ld2))
-// 			     );
-// 	  break;
-// 	case 1: // ----- side 1 -----
-// 	  if(!ld1)
-// 	    ld1 = NEW LeafDataPeriodic(child1->getLeafData());
-// 	  ld1->addPeriodicInfo(2, it->periodicCoords);
-// 	  child1->setLeafData(NEW LeafDataPeriodicRefinable
-// 			      (NEW LeafDataPeriodicCoarsenable(ld1))
-// 			     );
-// 	  break;
-// 	case 2: // ----- side 2 -----
-// 	  {
-// 	    if(!ld1)
-// 	      ld1 = NEW LeafDataPeriodic(child1->getLeafData());
-// 	    if(!ld2)
-// 	      ld2 = NEW LeafDataPeriodic(child2->getLeafData());
-
-// 	    DimVec<WorldVector<double> > coords1(it->periodicCoords);
-// 	    DimVec<WorldVector<double> > coords2(it->periodicCoords);
-
-// 	    WorldVector<double> newCoords;
-// 	    newCoords = it->periodicCoords[0];
-// 	    newCoords += it->periodicCoords[1];
-// 	    newCoords *= 0.5;
-
-// 	    coords1[1] = newCoords;
-// 	    coords2[0] = newCoords;
-
-// 	    ld1->addPeriodicInfo(0, coords1);
-// 	    ld2->addPeriodicInfo(1, coords2);
-
-// 	    child1->setLeafData(NEW LeafDataPeriodicRefinable
-// 				(NEW LeafDataPeriodicCoarsenable(ld1))
-// 				);
-// 	    child2->setLeafData(NEW LeafDataPeriodicRefinable
-// 				(NEW LeafDataPeriodicCoarsenable(ld2))
-// 				);
-// 	  }
-// 	  break;
-// 	default: ERROR_EXIT("invalid element side\n");
-// 	}
-//       }
-//       break;
-//     case 3: // ----- dim = 3 -----
-//       ERROR_EXIT("not yet for 3d\n");
-//       // for each periodic info
-//       for(it = ldp->periodicInfoList.begin();
-// 	  it != ldp->periodicInfoList.end();
-// 	  ++it)
-//       {
-// 	switch(it->elementSide) {
-// 	case 0: // ----- side 0 -----
-// 	  break;
-// 	case 1: // ----- side 1 -----
-// 	  break;
-// 	case 2: // ----- side 2 -----
-// 	  break;
-// 	case 3: // ----- side 3 -----
-// 	  break;
-// 	default: ERROR_EXIT("invalid element side\n");
-// 	}
-//       }
-//       break;
-//     default: ERROR_EXIT("invalid dim\n");
-//     }
-//   }
-// }
-
-// LeafData *LeafData::createLeafData(::std::string type) 
-// {
-//   if(type == "NULL") return NULL;
-//   if(type == "LeafDataEstimatable") return new LeafDataEstimatable;
-//   if(type == "LeafDataEstimatableVec") return new LeafDataEstimatableVec;
-//   if(type == "LeafDataCoarsenable") return new LeafDataCoarsenable;
-//   if(type == "LeafDataCoarsenableVec") return new LeafDataCoarsenableVec;
-//   if(type == "LeafDataPeriodic") return new LeafDataPeriodic;
-
-//   ERROR_EXIT("unknown type\n");
-//   return NULL;
-// }
-
-}
diff --git a/AMDiS/src/LeafData.h b/AMDiS/src/LeafData.h
index 1573ab4227e78f27ca356b63bbd01b893a4607bb..8178c4b3c4715699c5113a1fc25aa2d5a8b17a0e 100644
--- a/AMDiS/src/LeafData.h
+++ b/AMDiS/src/LeafData.h
@@ -182,18 +182,9 @@ namespace AMDiS {
      * Sets \ref errorEstimate
      */
     inline void setErrorEstimate(int index, double est) { 
-      //     TEST_EXIT(index < static_cast<int>(errorEstimate.getSize()))
-      //       ("invalid index\n");
       errorEstimate[index] = est; 
     };
 
-    /** \brief
-     * Returns \ref errorEstimate
-     */
-    //    inline double getErrorEstimate(int index) const { 
-    //      return const_cast<map<int,double,less<int>,allocator<double> >*>(&errorEstimate)->operator[](index); 
-    //    };
-
     /** \brief
      * Returns \ref errorEstimate
      */
diff --git a/AMDiS/src/Line.h b/AMDiS/src/Line.h
index c1c85a8a86d566dca59ba6c809980b4278d57388..dbec689f1c8f922f6a2c336649b744d912be336d 100644
--- a/AMDiS/src/Line.h
+++ b/AMDiS/src/Line.h
@@ -113,8 +113,8 @@ public:
    */
   virtual int getSideOfChild(int child, int side, int ) const {
     FUNCNAME("Line::getSideOfChild()");
-    TEST_EXIT(child==0 || child==1)("child must be in (0,1)\n");
-    TEST_EXIT(side >= 0 && side <= 1)("side must be between 0 and 1\n");
+    TEST_EXIT_DBG(child==0 || child==1)("child must be in (0,1)\n");
+    TEST_EXIT_DBG(side >= 0 && side <= 1)("side must be between 0 and 1\n");
     return sideOfChild[child][side];
   };
 
@@ -123,8 +123,8 @@ public:
    */
   virtual int getVertexOfParent(int child, int side, int) const {
     FUNCNAME("Line::getVertexOfParent()");
-    TEST_EXIT(child==0 || child==1)("child must be in (0,1)\n");
-    TEST_EXIT(side >= 0 && side <= 2)("side must be between 0 and 1\n");
+    TEST_EXIT_DBG(child==0 || child==1)("child must be in (0,1)\n");
+    TEST_EXIT_DBG(side >= 0 && side <= 2)("side must be between 0 and 1\n");
     return vertexOfParent[child][side];
   };
 
diff --git a/AMDiS/src/MacroElement.cc b/AMDiS/src/MacroElement.cc
index b55b65effce43531d571099a01cf3da1e7da35b7..8378759be2ab91e4ab864a8d3dd89fcdac3ab3a0 100644
--- a/AMDiS/src/MacroElement.cc
+++ b/AMDiS/src/MacroElement.cc
@@ -78,12 +78,15 @@ namespace AMDiS {
     in >> typeName;
     in.get();
 
-    if(element) {
+    if (element) {
       TEST_EXIT(typeName == element->getTypeName())("wrong element type name\n");
     } else {
-      if(typeName == "Line") element = NEW Line(NULL);
-      if(typeName == "Triangle") element = NEW Triangle(NULL);
-      if(typeName == "Tetrahedron") element = NEW Tetrahedron(NULL);
+      if (typeName == "Line") 
+	element = NEW Line(NULL);
+      if (typeName == "Triangle") 
+	element = NEW Triangle(NULL);
+      if (typeName == "Tetrahedron") 
+	element = NEW Tetrahedron(NULL);
     }
 
     element->deserialize(in);
@@ -91,7 +94,7 @@ namespace AMDiS {
     // read coords
     int i, size;
     in.read(reinterpret_cast<char*>(&size), sizeof(int));
-    if(coord.getSize()) {
+    if (coord.getSize()) {
       TEST_EXIT(coord.getSize() == size)("invalid size\n");
     } else {
       coord.initSize(size);
diff --git a/AMDiS/src/MacroReader.cc b/AMDiS/src/MacroReader.cc
index b3f245aba4d2888c5e1156c35715ad4b4fcf44bf..7157b259e7325030e106aa104be2788de6c87a48 100644
--- a/AMDiS/src/MacroReader.cc
+++ b/AMDiS/src/MacroReader.cc
@@ -52,6 +52,7 @@ namespace AMDiS {
       int *verticesEl1 = GET_MEMORY(int, dim);
       int *verticesEl2 = GET_MEMORY(int, dim);
       int mode = -1; // 0: drop dofs, 1: associate dofs
+      int result;
       BoundaryType boundaryType;
 
       fscanf(file, "%*s %d", &n);
@@ -64,17 +65,24 @@ namespace AMDiS {
 	::std::map<int, int> vertexMapEl1;
 	::std::map<int, int> vertexMapEl2;
 
-	TEST_EXIT(fscanf(file, "%d", &mode) == 1)("mode?\n");
+	result = fscanf(file, "%d", &mode);
+	TEST_EXIT(result == 1)("mode?\n");
       
-	TEST_EXIT(fscanf(file, "%d", &boundaryType) == 1)("boundaryType?\n");
+	result = fscanf(file, "%d", &boundaryType);
+	TEST_EXIT(result == 1)("boundaryType?\n");
       
-	TEST_EXIT(fscanf(file, "%d", &el1) == 1)("el1?\n");
+	result = fscanf(file, "%d", &el1);
+	TEST_EXIT(result == 1)("el1?\n");
+
 	for (int j = 0; j < dim; j++) {
-	  TEST_EXIT(fscanf(file, "%d", &verticesEl1[j]) == 1)("vertEl1[%d]\n", j);
+	  result = fscanf(file, "%d", &verticesEl1[j]);
+	  TEST_EXIT(result == 1)("vertEl1[%d]\n", j);
 	}
-	TEST_EXIT(fscanf(file, "%d", &el2) == 1)("el2?\n");
+	result = fscanf(file, "%d", &el2);
+	TEST_EXIT(result == 1)("el2?\n");
 	for (int j = 0; j < dim; j++) {
-	  TEST_EXIT(fscanf(file, "%d", &verticesEl2[j]) == 1)("vertEl2[%d]\n", j);
+	  result = fscanf(file, "%d", &verticesEl2[j]);
+	  TEST_EXIT(result == 1)("vertEl2[%d]\n", j);
 	}
 	for (int j = 0; j < dim; j++) {
 	  if (mode == 0) {
@@ -340,10 +348,12 @@ namespace AMDiS {
   {
     FUNCNAME("MacroInfo::fill()");
 
-    int      i;
-    int      dim=pmesh->getDim();
+    TEST_EXIT(pmesh)("no mesh\n");
+
+    int i;
+    int dim = pmesh->getDim();
   
-    TEST_EXIT(mesh = pmesh)("no mesh\n");
+    mesh = pmesh;
 
     mesh->setNumberOfElements(ne);
     mesh->setNumberOfLeaves(ne);
@@ -484,11 +494,11 @@ namespace AMDiS {
     DimVec<int> *ind = NULL;
 
     TEST_EXIT(filename)("no file specified; filename NULL pointer\n");
-    //TEST_EXIT(pmesh)("no mesh specified; mesh NULL pointer\n");
     TEST_EXIT(strlen(filename) < static_cast<unsigned int>(127))
       ("can only handle filenames up to 127 characters\n");
 
-    TEST_EXIT((file=fopen(filename,"r")))("cannot open file %s\n",filename);
+    file = fopen(filename, "r");
+    TEST_EXIT(file)("cannot open file %s\n", filename);
     strncpy(name, filename, 127);
 
     /****************************************************************************/
@@ -556,13 +566,17 @@ namespace AMDiS {
     /*  and now, reading data ...                                               */
     /****************************************************************************/
 	
-    TEST_EXIT((file=fopen(name,"r")))("cannot open file %s\n",name);
+    file = fopen(name, "r");
+    TEST_EXIT(file)("cannot open file %s\n",name);
+
+    int result;
 
     for (i_key = 0; i_key < n_keys; i_key++) {
 
 	switch(sort_key[i_key]) {
 	  case 0:
-	    TEST_EXIT(fscanf(file, "%*s %d", &dim) == 1)
+	    result = fscanf(file, "%*s %d", &dim);
+	    TEST_EXIT(result == 1)
 	      ("cannot read DIM correctly in file %s\n", name);
 
 	    ind = NEW DimVec<int>(dim, NO_INIT);
@@ -570,7 +584,8 @@ namespace AMDiS {
 	    key_def[0] = true;
 	    break;
 	  case 1:
-	    TEST_EXIT(fscanf(file, "%*s %d", &dow) == 1)
+	    result = fscanf(file, "%*s %d", &dow);
+	    TEST_EXIT(result == 1)
 	      ("cannot read Global::getGeo(WORLD) correctly in file %s\n", name);
 	    TEST_EXIT(dow == Global::getGeo(WORLD))
 	      ("dimension of world = %d != Global::getGeo(WORLD) = %d\n", 
@@ -579,7 +594,8 @@ namespace AMDiS {
 	    key_def[1] = true;
 	    break;
 	  case 2:
-	    TEST_EXIT(fscanf(file, "%*s %*s %*s %d", &nv) == 1)
+	    result = fscanf(file, "%*s %*s %*s %d", &nv);
+	    TEST_EXIT(result == 1)
 	      ("cannot read number of vertices correctly in file %s\n", name);
 	    TEST_EXIT(nv > 0)
 	      ("number of vertices = %d must be bigger than 0\n", nv);
@@ -589,7 +605,8 @@ namespace AMDiS {
 	      fill(mesh, ne, nv);
 	    break;
 	  case 3:
-	    TEST_EXIT(fscanf(file, "%*s %*s %*s %d", &ne) == 1)
+	    result = fscanf(file, "%*s %*s %*s %d", &ne);
+	    TEST_EXIT(result == 1)
 	      ("cannot read number of elements correctly in file %s\n", name);
 	    TEST_EXIT(ne > 0)
 	      ("number of elements = %d must be bigger than 0\n", ne);
@@ -602,7 +619,8 @@ namespace AMDiS {
 	    fscanf(file, "%*s %*s");
 	    for (int i = 0; i < nv; i++) {
 	      for (j = 0; j <Global::getGeo(WORLD) ; j++) {
-		TEST_EXIT(fscanf(file, "%lf", &dbl) == 1)
+		result = fscanf(file, "%lf", &dbl);
+		TEST_EXIT(result == 1)
 		  ("error while reading coordinates, check file %s\n", name);
 		coords[i][j] = dbl;
 	      }
@@ -616,12 +634,13 @@ namespace AMDiS {
 	    /****************************************************************************/
 
 	    for (int i = 0; i < ne; i++) {
-		TEST_EXIT(read_indices(file, *ind))
-		  ("cannot read vertex indices of element %d in file %s\n",  i, name);
+	      result = read_indices(file, *ind);
+	      TEST_EXIT(result)
+		("cannot read vertex indices of element %d in file %s\n",  i, name);
 
-		for (k = 0; k < mesh->getGeo(VERTEX); k++)
-		  mel_vertex[i][k] = (*ind)[k];
-	      }
+	      for (k = 0; k < mesh->getGeo(VERTEX); k++)
+		mel_vertex[i][k] = (*ind)[k];
+	    }
 
 	    key_def[5] = true;
 	    break;
@@ -633,13 +652,14 @@ namespace AMDiS {
 	    for (int i = 0; i < ne; i++) {  
                 // boundary information of ith element 
 
-		TEST_EXIT(read_indices(file, *ind))
-		    ("cannot read boundary type of element %d in file %s\n", i, name);
+	      result = read_indices(file, *ind);
+	      TEST_EXIT(result)
+		("cannot read boundary type of element %d in file %s\n", i, name);
 
-		// fill boundary of macro-element
-		MacroReader::fillMelBoundary(mesh, 
-					     mel[i], 
-					     VecConv<int,NEIGH,PARTS>::convertVec((*ind), mesh));
+	      // fill boundary of macro-element
+	      MacroReader::fillMelBoundary(mesh, 
+					   mel[i], 
+					   VecConv<int,NEIGH,PARTS>::convertVec((*ind), mesh));
 	    }
 
 	    this->fillBoundaryInfo(mesh);
@@ -680,13 +700,14 @@ namespace AMDiS {
 	      ERROR("there is no element type in 2d and 2d; ignoring data for elType\n");
 
 	    for (int i = 0; i < ne; i++) {
-		TEST_EXIT(fscanf(file, "%d", &j) == 1)
-		  ("cannot read elType of element %d in file %s\n",
-		   i, name);
-		if (dim == 3) {
-		  (mel)[i]->elType = j;
-		}
+	      result = fscanf(file, "%d", &j);
+	      TEST_EXIT(result == 1)
+		("cannot read elType of element %d in file %s\n",
+		 i, name);
+	      if (dim == 3) {
+		(mel)[i]->elType = j;
 	      }
+	    }
 
 	    key_def[8] = true;
 	    break;
@@ -702,7 +723,8 @@ namespace AMDiS {
 	      }
 
 	      for (int i = 0; i < ne; i++) {
-		TEST_EXIT(read_indices(file, *ind))
+		result = read_indices(file, *ind);
+		TEST_EXIT(result)
 		  ("cannot read boundary projector of element %d in file %s\n", i, name);
 	
 		Projection *projector = Projection::getProjection((*ind)[0]);
@@ -734,9 +756,10 @@ namespace AMDiS {
 	    /****************************************************************************/
 
 	    for (int i = 0; i < ne; i++) {
-	      TEST_EXIT(fscanf(file, "%d", &j) == 1)
+	      result = fscanf(file, "%d", &j);
+	      TEST_EXIT(result == 1)
 		("cannot read region of element %d in file %s\n", i, name);
-	      if(j >= 0) {
+	      if (j >= 0) {
 		Element *el = mel[i]->getElement();
 		ElementRegion_ED *elementRegion = 
 		  NEW ElementRegion_ED(el->getElementData());
@@ -749,7 +772,8 @@ namespace AMDiS {
 	  case 11:
 	    fscanf(file, "%*s %*s");
 	    for (int i = 0; i < ne; i++) {
-	      TEST_EXIT(read_indices(file, *ind))
+	      result = read_indices(file, *ind);
+	      TEST_EXIT(result)
 		("cannot read surface regions of element %d in file %s\n", i, name);
 
 	      Element *el = mel[i]->getElement();
diff --git a/AMDiS/src/MatVecMultiplier.cc b/AMDiS/src/MatVecMultiplier.cc
index f2c3595f180b5f96bc4a5aa9ba96416805ef56c5..fdb4b31b75deda777455cde7b6fe45266f155aba 100644
--- a/AMDiS/src/MatVecMultiplier.cc
+++ b/AMDiS/src/MatVecMultiplier.cc
@@ -48,8 +48,8 @@ namespace AMDiS {
 
     unsigned int nRows = matrix->size();
 
-    TEST_EXIT(x.size() == nRows)("SIZE!\n");
-    TEST_EXIT(result.size() == nRows)("SIZE!\n");
+    TEST_EXIT_DBG(x.size() == nRows)("SIZE!\n");
+    TEST_EXIT_DBG(result.size() == nRows)("SIZE!\n");
 
     if (!add) {
       for (unsigned int i = 0; i < nRows; i++) {
@@ -99,12 +99,12 @@ namespace AMDiS {
       
 	  double entry = (*rowIt1)[i].entry;
 
-	  TEST_EXIT(entry >= 0)("entries must be >= 0\n");
+	  TEST_EXIT_DBG(entry >= 0)("entries must be >= 0\n");
 
 	  rowSum += entry;
 	}
 
-	TEST_EXIT(rowSum > 1E-20)("matrix not inversable\n");
+	TEST_EXIT_DBG(rowSum > 1E-20)("matrix not inversable\n");
 
 	(*rowIt2).resize(1);
 	(*rowIt2)[0].col = rowIt2.getDOFIndex();
@@ -151,12 +151,12 @@ namespace AMDiS {
       
 	    double entry = (*rowIt1)[j].entry;
 
-	    TEST_EXIT(entry >= 0)("entries must be >= 0\n");
+	    TEST_EXIT_DBG(entry >= 0)("entries must be >= 0\n");
 
 	    rowSum += entry;
 	  }
 
-	  TEST_EXIT(rowSum > 1E-20)("matrix not inversable\n");
+	  TEST_EXIT_DBG(rowSum > 1E-20)("matrix not inversable\n");
 
 	  (*rowIt2).resize(1);
 	  (*rowIt2)[0].col = rowIt2.getDOFIndex();
diff --git a/AMDiS/src/MatrixVector.h b/AMDiS/src/MatrixVector.h
index f7e5fe2e1f35a37de231ada482ddb0207b9ba796..e2f61122b7f0bd002e3b43f3a31031e98dca572f 100644
--- a/AMDiS/src/MatrixVector.h
+++ b/AMDiS/src/MatrixVector.h
@@ -94,7 +94,7 @@ namespace AMDiS {
      * Assignement operator
      */
     inline const Vector<T>& operator=(const Vector<T>& rhs) {
-      TEST_EXIT(rhs.size == size)("invalid size\n");
+      TEST_EXIT_DBG(rhs.size == size)("invalid size\n");
       T *rhsIt, *thisIt;
       for(rhsIt = rhs.begin(), thisIt = this->begin();
 	  rhsIt != rhs.end();
@@ -191,7 +191,7 @@ namespace AMDiS {
      * Access to the i-th vector element.
      */
     inline T& operator[](int i) {
-      TEST_EXIT(i < size && i >= 0)("invalid index\n");
+      TEST_EXIT_DBG(i < size && i >= 0)("invalid index\n");
       return valArray[i];
     };
 
@@ -199,7 +199,7 @@ namespace AMDiS {
      * Access to the i-th vector element for const vectors.
      */
     inline const T& operator[] (int i) const {
-      TEST_EXIT(i < size && i >= 0)("invalid index\n");
+      TEST_EXIT_DBG(i < size && i >= 0)("invalid index\n");
       return valArray[i];
     };
 
@@ -400,8 +400,8 @@ namespace AMDiS {
   template<typename T>
   inline const Vector<T>& mv(const Matrix<T>& m, const Vector<T>& v, Vector<T>& result)
   {
-    TEST_EXIT(m.getNumCols() == v.getSize())("m and v not compatible\n");
-    TEST_EXIT(v.getSize() == result.getSize())("wrong result size\n");
+    TEST_EXIT_DBG(m.getNumCols() == v.getSize())("m and v not compatible\n");
+    TEST_EXIT_DBG(v.getSize() == result.getSize())("wrong result size\n");
 
     T *resultIt, *mIt, *vIt;
 
@@ -462,8 +462,8 @@ namespace AMDiS {
   template<typename T> 
   inline const Vector<T>& add(const Vector<T>& v1, const Vector<T>& v2, Vector<T>& result)
   {
-    TEST_EXIT(v1.getSize() == v2.getSize())("invalid size in test v1 == v2\n");
-    TEST_EXIT(v2.getSize() == result.getSize())("invalid size in test v2 == result\n");
+    TEST_EXIT_DBG(v1.getSize() == v2.getSize())("invalid size in test v1 == v2\n");
+    TEST_EXIT_DBG(v2.getSize() == result.getSize())("invalid size in test v2 == result\n");
     T *v1It, *v2It, *resultIt;
     for (v1It = v1.begin(), v2It = v2.begin(), resultIt = result.begin();
 	 v1It != v1.end();
@@ -483,7 +483,7 @@ namespace AMDiS {
 			       const Vector<T>& v, 
 			       Vector<T>& result)
   {
-    TEST_EXIT(v.getSize() == result.getSize())("invalid size\n");
+    TEST_EXIT_DBG(v.getSize() == result.getSize())("invalid size\n");
     T *vIt, *resultIt;
     for (vIt = v.begin(), resultIt = result.begin();
 	 vIt != v.end();
@@ -501,7 +501,7 @@ namespace AMDiS {
   template<typename T>
   inline const Vector<T>& add(const Vector<T>& v, const T& scal, Vector<T>& result)
   {
-    TEST_EXIT(v.getSize() == result.getSize())("invalid size\n");
+    TEST_EXIT_DBG(v.getSize() == result.getSize())("invalid size\n");
     T *vIt, *resultIt;
     for (vIt = v.begin(), resultIt = result.begin();
 	 vIt != v.end();
@@ -521,7 +521,7 @@ namespace AMDiS {
 			       const Vector<T> &x,
 			       Vector<T> &y)
   {
-    TEST_EXIT(x.getSize() == y.getSize())("invalid size\n");
+    TEST_EXIT_DBG(x.getSize() == y.getSize())("invalid size\n");
     T *xIt, *yIt;
     for (xIt = x.begin(), yIt = y.begin();
 	 xIt != x.end();
@@ -596,8 +596,8 @@ namespace AMDiS {
 		     const Vector<T>& y, 
 		     Vector<T>& z)
   {
-    FUNCNAME("vectorProduct");
-    TEST_EXIT(Global::getGeo(WORLD) == 3)("DIM_OF_WORLD != 3\n");
+    FUNCNAME("vectorProduct()");
+    TEST_EXIT_DBG(Global::getGeo(WORLD) == 3)("DIM_OF_WORLD != 3\n");
     z[0] = x[1] * y[2] - x[2] * y[1];
     z[1] = x[2] * y[0] - x[0] * y[2];
     z[2] = x[0] * y[1] - x[1] * y[0];
diff --git a/AMDiS/src/MemoryManager.h b/AMDiS/src/MemoryManager.h
index c2045de62fa6a1c6920491b42a70d4b6d11776c3..51e18dfea992e20bdb48e4a0382e194fba9c243c 100644
--- a/AMDiS/src/MemoryManager.h
+++ b/AMDiS/src/MemoryManager.h
@@ -277,7 +277,7 @@ namespace AMDiS {
      */
     static void freeMemory(T* mem, size_t s) {
       FUNCNAME("MemoryManager<T>::freeMemory()");
-      TEST_EXIT(singleton)("not initialized\n");    
+      TEST_EXIT_DBG(singleton)("not initialized\n");    
       byteCount -= s;
       singleton->instanceCount -= s/sizeof(T);
       singleton->typedByteCount -= s;
@@ -301,7 +301,7 @@ namespace AMDiS {
       int status;
       size_t length;
       abi::__cxa_demangle(typeid(T).name(), result, &length, &status);
-      TEST_EXIT(status == 0)("demangling failed\n");
+      TEST_EXIT_DBG(status == 0)("demangling failed\n");
       return ::std::string(result);
 #endif
       return typeid(T).name();
@@ -565,7 +565,7 @@ namespace AMDiS {
   void MemoryManager<T>::init() 
   {
     FUNCNAME("MemoryManager<T>::init()");
-    TEST_EXIT(singleton == NULL)("already initialized\n");
+    TEST_EXIT_DBG(singleton == NULL)("already initialized\n");
 
     singleton = new MemoryManager<T>;
     singleton->typeId = idCounter++;
diff --git a/AMDiS/src/Mesh.cc b/AMDiS/src/Mesh.cc
index 05a703cbd457b9f841d54bf87747f05c119e5aa1..e788ae075f4de4c1d79d502dda4bb50292bbb55d 100644
--- a/AMDiS/src/Mesh.cc
+++ b/AMDiS/src/Mesh.cc
@@ -244,7 +244,7 @@ namespace AMDiS {
 	
 	  FREE_MEMORY(oldDOF, DegreeOfFreedom*, oldNNodes);
 
-	  TEST_EXIT(index==nNodeEl)("ERROR: Number of entered nodes %f != number of nodes %f\n",index,nNodeEl);
+	  TEST_EXIT_DBG(index == nNodeEl)("ERROR: Number of entered nodes %f != number of nodes %f\n",index,nNodeEl);
 
 	}
 
@@ -332,7 +332,7 @@ namespace AMDiS {
     nDOF[CENTER]  += localAdmin->getNumberOfDOFs(CENTER);
     nDOFEl += nDOF[CENTER];
 
-    TEST_EXIT(nDOF[VERTEX] > 0)("no vertex dofs\n");
+    TEST_EXIT_DBG(nDOF[VERTEX] > 0)("no vertex dofs\n");
 
     node[VERTEX]  = 0;
     nNodeEl     = getGeo(VERTEX);
@@ -368,8 +368,9 @@ namespace AMDiS {
     Flag fill_flag;
 
     for (iadmin = 0; iadmin < static_cast<int>(admin.size()); iadmin++) {
-      TEST_EXIT((compressAdmin = admin[iadmin]))
-	("no admin[%d] in mesh\n", iadmin);
+      compressAdmin = admin[iadmin];
+
+      TEST_EXIT_DBG(compressAdmin)("no admin[%d] in mesh\n", iadmin);
       
       if ((size = compressAdmin->getSize()) < 1) 
 	continue;
@@ -400,7 +401,7 @@ namespace AMDiS {
   {
     FUNCNAME("Mesh::getDOF()");
 
-    TEST_EXIT(position >= CENTER && position <= FACE)
+    TEST_EXIT_DBG(position >= CENTER && position <= FACE)
       ("unknown position %d\n", position);
 
     int ndof = getNumberOfDOFs(position);
@@ -411,12 +412,12 @@ namespace AMDiS {
 
     for (int i = 0; i < getNumberOfDOFAdmin(); i++) {
       const DOFAdmin *localAdmin = &getDOFAdmin(i);
-      TEST_EXIT(localAdmin)("no admin[%d]\n", i);
+      TEST_EXIT_DBG(localAdmin)("no admin[%d]\n", i);
       
       int n  = localAdmin->getNumberOfDOFs(position);
       int n0 = localAdmin->getNumberOfPreDOFs(position);
       
-      TEST_EXIT(n + n0 <= ndof)("n=%d, n0=%d too large: ndof=%d\n", n, n0, ndof);
+      TEST_EXIT_DBG(n + n0 <= ndof)("n=%d, n0=%d too large: ndof=%d\n", n, n0, ndof);
       
       for (int j = 0; j < n; j++) {
 	dof[n0 + j] = const_cast<DOFAdmin*>(localAdmin)->getDOFIndex();
@@ -445,7 +446,7 @@ namespace AMDiS {
   {
     FUNCNAME("Mesh::freeDOFPtrs()");
 
-    TEST_EXIT(ptrs)("ptrs=NULL\n");
+    TEST_EXIT_DBG(ptrs)("ptrs=NULL\n");
 
     if (nNodeEl <= 0)
       return;
@@ -518,7 +519,7 @@ namespace AMDiS {
     DOFAdmin *localAdmin;
     int     i, j, n, n0, ndof;
 
-    TEST_EXIT(position >= CENTER && position <= FACE)
+    TEST_EXIT_DBG(position >= CENTER && position <= FACE)
       ("unknown position %d\n",position);
 
     ndof = nDOF[position];
@@ -539,7 +540,7 @@ namespace AMDiS {
 	return;
       }
 
-    TEST_EXIT(ndof <= MAX_DOF)
+    TEST_EXIT_DBG(ndof <= MAX_DOF)
       ("ndof too big: ndof=%d, MAX_DOF=%d\n",ndof,MAX_DOF);
 
     for (i = 0; i < static_cast<int>(admin.size()); i++)
@@ -549,7 +550,7 @@ namespace AMDiS {
 	n  = localAdmin->getNumberOfDOFs(position);
 	n0 = localAdmin->getNumberOfPreDOFs(position);
 
-	TEST_EXIT(n+n0 <= ndof)("n=%d, n0=%d too large: ndof=%d\n", n, n0, ndof);
+	TEST_EXIT_DBG(n+n0 <= ndof)("n=%d, n0=%d too large: ndof=%d\n", n, n0, ndof);
 
 	for (j = 0; j < n; j++)
 	  {
@@ -571,7 +572,8 @@ namespace AMDiS {
   Element* Mesh::createNewElement(Element *parent)
   {
     FUNCNAME("Mesh::createNewElement()");
-    TEST_EXIT(elementPrototype)("no element prototype\n");
+
+    TEST_EXIT_DBG(elementPrototype)("no element prototype\n");
 
     Element *el = parent ? parent->clone() : elementPrototype->clone();
   
@@ -922,7 +924,7 @@ namespace AMDiS {
     // read dim
     int oldVal = dim;
     in.read(reinterpret_cast<char*>(&dim), sizeof(int));
-    TEST_EXIT((oldVal == 0) || (dim == oldVal))("invalid dimension\n");
+    TEST_EXIT_DBG((oldVal == 0) || (dim == oldVal))("invalid dimension\n");
 
     // read nVertices
     in.read(reinterpret_cast<char*>(&nVertices), sizeof(int));
@@ -951,7 +953,7 @@ namespace AMDiS {
     // read nDOFEl
     oldVal = nDOFEl;
     in.read(reinterpret_cast<char*>(&nDOFEl), sizeof(int));
-    TEST_EXIT((oldVal == 0) || (nDOFEl == oldVal))("invalid nDOFEl\n");
+    TEST_EXIT_DBG((oldVal == 0) || (nDOFEl == oldVal))("invalid nDOFEl\n");
 
     // read nDOF
     nDOF.deserialize(in);
@@ -959,7 +961,7 @@ namespace AMDiS {
     // read nNodeEl
     oldVal = nNodeEl;
     in.read(reinterpret_cast<char*>(&nNodeEl), sizeof(int));
-    TEST_EXIT((oldVal == 0) || (nNodeEl == oldVal))("invalid nNodeEl\n");
+    TEST_EXIT_DBG((oldVal == 0) || (nNodeEl == oldVal))("invalid nNodeEl\n");
 
     // read node
     node.deserialize(in);
diff --git a/AMDiS/src/MeshStructure.cc b/AMDiS/src/MeshStructure.cc
index 904ecd09403b08dc844ebe5808439fc32b8a3d08..5e9451f67f68252f8e6f387e98eec2fa749d27bd 100644
--- a/AMDiS/src/MeshStructure.cc
+++ b/AMDiS/src/MeshStructure.cc
@@ -72,7 +72,7 @@ namespace AMDiS {
 
     if(pos_ >= unsignedLongSize_) {
       currentIndex_++;
-      TEST_EXIT(currentIndex_ < static_cast<int>(code_.size()))
+      TEST_EXIT_DBG(currentIndex_ < static_cast<int>(code_.size()))
 	("end of structure reached\n");
       pos_ = 0;
       currentCode_ = code_[currentIndex_];
@@ -89,7 +89,7 @@ namespace AMDiS {
     } else {
       bool cont = nextElement(insert);
       cont = skipBranch(insert); // left branch
-      TEST_EXIT(cont)("invalid structure\n");
+      TEST_EXIT_DBG(cont)("invalid structure\n");
       cont = skipBranch(insert); // righ branch
       return cont;
     }
@@ -118,7 +118,7 @@ namespace AMDiS {
 	  cont2 = structure2->nextElement();
 	}
       }
-      TEST_EXIT(cont1 == cont2)("structures don't match\n");
+      TEST_EXIT_DBG(cont1 == cont2)("structures don't match\n");
       cont = cont1;
     }
 
@@ -141,12 +141,12 @@ namespace AMDiS {
     reset();
     elInfo = stack.traverseFirst(mesh, -1, Mesh::CALL_EVERY_EL_PREORDER);
     while(elInfo) {
-      TEST_EXIT(cont)("unexpected structure code end!\n");
+      TEST_EXIT_DBG(cont)("unexpected structure code end!\n");
 
       Element *element = elInfo->getElement();
 
       if(isLeafElement()) {
-	TEST_EXIT(element->isLeaf())("mesh finer than code\n");
+	TEST_EXIT_DBG(element->isLeaf())("mesh finer than code\n");
       };
 
       if(element->isLeaf() && !isLeafElement()) {
@@ -158,7 +158,7 @@ namespace AMDiS {
 	if(checkPartition) {
 	  PartitionElementData *partitionData = dynamic_cast<PartitionElementData*>
 	    (element->getElementData(PARTITION_ED));
-	  TEST_EXIT(partitionData)("no partition element data\n");
+	  TEST_EXIT_DBG(partitionData)("no partition element data\n");
 	  PartitionStatus status = partitionData->getPartitionStatus();
 	  if(status == OUT || status == UNDEFINED) {
 	    decorate = false;
diff --git a/AMDiS/src/MpCCIAdapter.cc b/AMDiS/src/MpCCIAdapter.cc
index 6b3ad245b64f50cf25ffe56bf273ec749c3d5fc5..2401716c18415f177c16e0e6534fdd23fb5c5c06 100644
--- a/AMDiS/src/MpCCIAdapter.cc
+++ b/AMDiS/src/MpCCIAdapter.cc
@@ -51,11 +51,15 @@ namespace AMDiS
     //if(useMPI_) MPI::COMM_WORLD.Barrier();
     //if(mpiRank_ == 0) {
 
-    if(idString) {
-      TEST_EXIT(CCI_Init_with_id_string(NULL, NULL, idString) == 0)
+    int error;
+
+    if (idString) {
+      error = CCI_Init_with_id_string(NULL, NULL, idString);
+      TEST_EXIT(error == 0)
 	("CCI_Init_with_id_string() failed\n");    
     } else {
-      TEST_EXIT(CCI_Init(NULL, NULL) == 0)("CCI_Init() failed\n");
+      error = CCI_Init(NULL, NULL);
+      TEST_EXIT(error == 0)("CCI_Init() failed\n");
     }
 
     //}
@@ -78,52 +82,52 @@ namespace AMDiS
     if(localComm == -1) {
       localComm_ = CCI_COMM_RCODE[remoteCodeID];
     } else {
-      TEST_EXIT(CCI_Comm_info(localComm_,
-			      &remoteCodeID_,
-			      &remoteComm_,
-			      CCI_MAX_NQUANTITIES,
-			      sendQuantities,
-			      sendMeshes,
-			      &sendNQuantities,
-			      CCI_MAX_NQUANTITIES,
-			      recvQuantities,
-			      recvMeshes,
-			      &recvNQuantities) == 0)
-	("CCI_Comm_info() failed\n");
+      error = CCI_Comm_info(localComm_,
+			     &remoteCodeID_,
+			     &remoteComm_,
+			     CCI_MAX_NQUANTITIES,
+			     sendQuantities,
+			     sendMeshes,
+			     &sendNQuantities,
+			     CCI_MAX_NQUANTITIES,
+			     recvQuantities,
+			     recvMeshes,
+			     &recvNQuantities);
+
+      TEST_EXIT(error)("CCI_Comm_info() failed\n");
 
       MSG("remote comm id: %d\n", remoteComm_);
 
-      TEST_EXIT(CCI_Def_comm(localComm_,
-			     remoteCodeID_,
-			     remoteComm_,
-			     numQuantities,
-			     quantityIDs,
-			     1,
-			     &meshID_) == 0)
-	("CCI_Def_comm() failed\n");
+      error = CCI_Def_comm(localComm_,
+			    remoteCodeID_,
+			    remoteComm_,
+			    numQuantities,
+			    quantityIDs,
+			    1,
+			    &meshID_);
+
+      TEST_EXIT(error)("CCI_Def_comm() failed\n");
     }
 
-    TEST_EXIT(CCI_Def_partition(meshID_, partitionID_) == 0)
-      ("CCI_Def_partition() failed\n");
+    error = CCI_Def_partition(meshID_, partitionID_);
+
+    TEST_EXIT(error == 0)("CCI_Def_partition() failed\n");
   
 
     transferMeshToMpCCI();
 
-    //if(useMPI_) MPI::COMM_WORLD.Barrier();
+    for (i = 0; i < numSyncPoints; i++) {
+      error = CCI_Sync_point_info(syncPointIDs[i],
+				   CCI_MAX_NQUANTITIES,
+				   sendQuantities,
+				   sendMeshes,
+				   &sendNQuantities,
+				   CCI_MAX_NQUANTITIES,
+				   recvQuantities,
+				   recvMeshes,
+				   &recvNQuantities);
 
-    //if(mpiRank_ == 0) {
-    // get sync points from input file
-    for(i = 0; i < numSyncPoints; i++) {
-      TEST_EXIT(CCI_Sync_point_info(syncPointIDs[i],
-				    CCI_MAX_NQUANTITIES,
-				    sendQuantities,
-				    sendMeshes,
-				    &sendNQuantities,
-				    CCI_MAX_NQUANTITIES,
-				    recvQuantities,
-				    recvMeshes,
-				    &recvNQuantities) == 0)
-	("CCI_Sync_point_info() failed\n");
+      TEST_EXIT(error == 0)("CCI_Sync_point_info() failed\n");
 
       MSG("sync point id: %d\n", syncPointIDs[i]);
       int j;
@@ -134,18 +138,18 @@ namespace AMDiS
 	MSG("recv quantity: %d\n", recvQuantities[j]);
       }
 
-      TEST_EXIT(CCI_Def_sync_point(syncPointIDs[i],
-				   sendNQuantities,
-				   sendQuantities,
-				   sendNQuantities,
-				   sendMeshes,
-				   recvNQuantities,
-				   recvQuantities,
-				   recvNQuantities,
-				   recvMeshes) == 0)
-	("CCI_Def_sync_point() failed\n");
+      error = CCI_Def_sync_point(syncPointIDs[i],
+				  sendNQuantities,
+				  sendQuantities,
+				  sendNQuantities,
+				  sendMeshes,
+				  recvNQuantities,
+				  recvQuantities,
+				  recvNQuantities,
+				  recvMeshes);
+
+      TEST_EXIT(error == 0)("CCI_Def_sync_point() failed\n");
     }
-    //}
 
     // define quantities
     DOFVector<double> **ptr = dofVectors;
@@ -155,19 +159,17 @@ namespace AMDiS
       ptr += dim;
     }
 
-    //if(useMPI_) MPI::COMM_WORLD.Barrier();
-
     // close MpCCI setup
-    TEST_EXIT(CCI_Close_setup(localCodeID_) == 0)("CCI_Close_setup() failed\n");
+    int error = CCI_Close_setup(localCodeID_);
+
+    TEST_EXIT(error == 0)("CCI_Close_setup() failed\n");
   }
 
   MpCCIAdapter::~MpCCIAdapter()
   {
     DELETE smiAdapter_;
-    //if(useMPI_) MPI::COMM_WORLD.Barrier();
-    //if(mpiRank_ == 0) {
-    TEST_EXIT(CCI_Finalize() == 0)("CCI_Finalize() failed\n");
-    //}
+    int error == CCI_Finalize();
+    TEST_EXIT(error == 0)("CCI_Finalize() failed\n");
   }
 
   void MpCCIAdapter::transferMeshToMpCCI()
@@ -246,28 +248,7 @@ namespace AMDiS
     error = SMI_End_read_transaction(applicationID_, meshID_);
     TEST_EXIT(error == SMI_OK)("SMI_End_read_transaction() failed\n");
 
-#if 0
-    // copy double to float
-    float *floatCoords = GET_MEMORY(float, numNodes * dow);
-
-    for(i = 0; i < numNodes * dow; i++) {
-      floatCoords[i] = static_cast<float>(coords[i]);
-    }
-
-    // transfer data to MpCCI
-    error = CCI_Def_nodes(meshID_,
-			  partitionID_,
-			  dow,
-			  numNodes,
-			  numNodes,
-			  nodeIDs,
-			  CCI_FLOAT,
-			  floatCoords);
-    TEST_EXIT(error == 0)("CCI_Def_nodes() failed\n");
-
-    FREE_MEMORY(floatCoords, float, numNodes * dow);
-#endif
-  
+ 
     // transfer data to MpCCI
     error = CCI_Def_nodes(meshID_,
 			  partitionID_,
@@ -496,31 +477,31 @@ namespace AMDiS
 
   void MpCCIAdapter::send(int numQuantities, int *quantityIDs)
   {
-    TEST_EXIT(CCI_Send(numQuantities,
-		       quantityIDs,
-		       1,
-		       &meshID_,
-		       localComm_) == 0)
-      ("CCI_Send() failed\n");
+    int error = CCI_Send(numQuantities,
+			 quantityIDs,
+			 1,
+			 &meshID_,
+			 localComm_);
+    TEST_EXIT(error == 0)("CCI_Send() failed\n");
   }
 
   void MpCCIAdapter::isend(int numQuantities, int *quantityIDs, CCI_Request *request)
   {
-    TEST_EXIT(CCI_Isend(numQuantities,
-			quantityIDs,
-			1,
-			&meshID_,
-			localComm_,
-			request) == 0)
-      ("CCI_Isend() failed\n");
+    int error = CCI_Isend(numQuantities,
+			  quantityIDs,
+			  1,
+			  &meshID_,
+			  localComm_,
+			  request);
+    TEST_EXIT(error == 0)("CCI_Isend() failed\n");
   }
 
   void MpCCIAdapter::wait(CCI_Request *request)
   {
     CCI_Status status;
-    TEST_EXIT(CCI_Wait(request,
-		       &status) == 0)
-      ("CCI_Wait() failed\n");  
+    int error = CCI_Wait(request,
+			 &status);
+    TEST_EXIT(error == 0)("CCI_Wait() failed\n");  
   }
 
   void MpCCIAdapter::recv(int numQuantities, int *quantityIDs)
@@ -533,29 +514,25 @@ namespace AMDiS
     for(i = 0; i < numQuantities; i++) {
       MSG("quantity %d: %d\n", i, quantityIDs[i]);
     }
-    TEST_EXIT(CCI_Recv(numQuantities,
-		       quantityIDs,
-		       1,
-		       &meshID_,
-		       localComm_,
-		       &status) == 0)
-      ("CCI_Send() failed\n");
+    int error = CCI_Recv(numQuantities,
+			 quantityIDs,
+			 1,
+			 &meshID_,
+			 localComm_,
+			 &status);
+    TEST_EXIT(error == 0)("CCI_Send() failed\n");
   }
 
   void MpCCIAdapter::reachSyncPoint(int syncPointID)
   {
-    //if(useMPI_) MPI::COMM_WORLD.Barrier();
-    //if(mpiRank_ == 0) {
     CCI_Status status;
-    TEST_EXIT(CCI_Reach_sync_point(syncPointID, &status) == 0)
-      ("CCI_Reach_sync_point() failed\n");
-    //}
+    int error = CCI_Reach_sync_point(syncPointID, &status);
+    TEST_EXIT(error == 0)("CCI_Reach_sync_point() failed\n");
   }
 
   void MpCCIAdapter::closeCouplingStep()
   {
-    int error;
-    error = CCI_Close_coupling_step(1, 0, 0, 0, 0, 0, 0);
+    int error = CCI_Close_coupling_step(1, 0, 0, 0, 0, 0, 0);
     TEST_EXIT(error == 0)("CCI_Close_coupling_step() failed\n");
   }
 
diff --git a/AMDiS/src/MultiGridSolver.cc b/AMDiS/src/MultiGridSolver.cc
index 5787882e9b07207e71a9483b500f023ce7a36275..cadde4400c8cc0bf76ef381154d070ddd479826f 100644
--- a/AMDiS/src/MultiGridSolver.cc
+++ b/AMDiS/src/MultiGridSolver.cc
@@ -119,7 +119,8 @@ namespace AMDiS {
 	}
       }
 
-      TEST_EXIT(mesh->queryCoarseDOFs())("preserve coarse dofs not set in mesh\n");
+      int error = mesh->queryCoarseDOFs();
+      TEST_EXIT(error)("preserve coarse dofs not set in mesh\n");
 
       const BasisFunction *basFcts = feSpace->getBasisFcts();
       int numDOFs = basFcts->getNumber();
@@ -917,9 +918,8 @@ namespace AMDiS {
       Mesh *mesh = feSpaces[0]->getMesh();
       int dim = mesh->getDim();
 
-      TEST_EXIT(mesh->queryCoarseDOFs())
-	("preserve coarse dofs not set in mesh\n");
-
+      int error = mesh->queryCoarseDOFs();
+      TEST_EXIT(error)("preserve coarse dofs not set in mesh\n");
 
       // Check which level is a multigrid level and set the corresponding field
       // to true.
diff --git a/AMDiS/src/Parameters.h b/AMDiS/src/Parameters.h
index 00612d0367e4677e5042ee44094975654ead2ace..7b71720e1f8815560fb21ce200a1d71779a02ecb 100644
--- a/AMDiS/src/Parameters.h
+++ b/AMDiS/src/Parameters.h
@@ -226,9 +226,13 @@ namespace AMDiS {
     /** \brief
      * Checks whether parameters are initialized. if not, call init()
      */
-    static bool initialized() { return (singlett != NULL); };
+    static bool initialized() { 
+      return (singlett != NULL); 
+    };
 
-    static Parameters *getSingleton() { return singlett; };
+    static Parameters *getSingleton() { 
+      return singlett; 
+    };
 
     // ===== Serializable implementation =====
 
diff --git a/AMDiS/src/PeriodicBC.cc b/AMDiS/src/PeriodicBC.cc
index 373d66f7e94801f0584d4c8fb1c74f26120a56bd..35325323c30dce5c3961ad7fd2b8582f5628f10b 100644
--- a/AMDiS/src/PeriodicBC.cc
+++ b/AMDiS/src/PeriodicBC.cc
@@ -62,10 +62,10 @@ namespace AMDiS {
       int sum = 0;
       for (int i = 0; i < dim + 1; i++) {
 	sum += i - vertexPermutation[i];
-	TEST_EXIT(vertexPermutation[i] < dim + 1)
+	TEST_EXIT_DBG(vertexPermutation[i] < dim + 1)
 	  ("invalid vertexPermuation\n");
       }
-      TEST_EXIT(sum == 0)("invalid vertexPermutation\n");
+      TEST_EXIT_DBG(sum == 0)("invalid vertexPermutation\n");
 
       // create dof permutation
       DimVec<double> *lambda;
@@ -114,8 +114,8 @@ namespace AMDiS {
 
       associated_ = mesh->getPeriodicAssociations()[boundaryType];
       
-      TEST_EXIT(associated_)("no associations for periodic boundary condition %d\n",
-			     boundaryType);
+      TEST_EXIT_DBG(associated_)("no associations for periodic boundary condition %d\n",
+				 boundaryType);
 
       const BasisFunction *basFcts = rowFESpace->getBasisFcts();
       int num = basFcts->getNumber();
@@ -206,7 +206,7 @@ namespace AMDiS {
   {
     FUNCNAME("PeriodicBC::exitMatrix()");
 
-    TEST_EXIT(matrix)("no matrix\n");
+    TEST_EXIT_DBG(matrix)("no matrix\n");
 
     if (matrix == masterMatrix_) {
       const BasisFunction *basFcts = rowFESpace->getBasisFcts();
@@ -214,83 +214,6 @@ namespace AMDiS {
       FREE_MEMORY(neighIndices_, DegreeOfFreedom, num);
       masterMatrix_ = NULL;
     }
-    // ---------- different assemblage style --------
-
-    //   DOFMatrix::Iterator matrixRow(matrix, USED_DOFS);
-    //   for(matrixRow.reset(); !matrixRow.end(); ++matrixRow) {
-    //     row = matrixRow.getDOFIndex();
-
-    //     rowSize = matrixRow->size();
-    //     newRow = ((*associated_)[row] == -1) ? row : (*associated_)[row];
-
-    //     if(row < newRow) {
-    //       for(i = 0; i < rowSize; i++) {
-    // 	col = (*matrixRow)[i].col;
-    // 	if(col == DOFMatrix::NO_MORE_ENTRIES) break;
-    // 	if(col == DOFMatrix::UNUSED_ENTRY) continue;
-    // 	newCol = ((*associated_)[col] == -1) ? col : (*associated_)[col];
-    // 	if(col < newCol) {
-    // 	  entry = (*matrixRow)[i].entry;
-    // 	  (*matrixRow)[i].col = DOFMatrix::UNUSED_ENTRY;
-    // 	  (*matrixRow)[i].entry = 0.0;
-    // 	  matrix->addSparseDOFEntry(1.0, row, newCol, entry, true);
-    // 	}
-    //       }
-    //       rowSize = matrixRow->size();
-    //       for(i = 0; i < rowSize; i++) {
-    // 	col = (*matrixRow)[i].col;
-    // 	if(col == DOFMatrix::NO_MORE_ENTRIES) break;
-    // 	if(col == DOFMatrix::UNUSED_ENTRY) continue;
-    // 	entry = (*matrixRow)[i].entry;
-    // 	matrix->addSparseDOFEntry(1.0, newRow, col, entry, true);
-    //       }
-    //       matrixRow->resize(2);
-    //       (*matrixRow)[0].col = row;
-    //       (*matrixRow)[0].entry = 100.0;1.0;
-    //       (*matrixRow)[1].col = newRow;
-    //       (*matrixRow)[1].entry = -100.0;-1.0;
-    //     }
-    //   }
-
-
-    // --- method 2 ---
-
-    //   for(matrixRow.reset(); !matrixRow.end(); ++matrixRow) {
-    //     row = matrixRow.getDOFIndex();
-    //     newRow = ((*associated_)[row] == -1) ? row : (*associated_)[row];
-    //     if(row < newRow) {
-    //       // remember old row matrix[row]
-    //       ::std::vector<MatEntry> oldMatrixRow = *matrixRow;
-    //       // add new row to old row
-    //       ::std::vector<MatEntry> &newMatrixRow = matrix->getRow(newRow);
-    //       rowSize = newMatrixRow.size();
-    //       for(i = 0; i < rowSize; i++) {
-    // 	col = newMatrixRow[i].col;
-    // 	if(col == DOFMatrix::NO_MORE_ENTRIES) break;
-    // 	if(col == DOFMatrix::UNUSED_ENTRY) continue;
-    // 	newCol = ((*associated_)[col] == -1) ? col : (*associated_)[col];
-    // 	entry = newMatrixRow[i].entry;
-    // 	matrix->addSparseDOFEntry(1.0, row, newCol, entry, true);
-    //       }
-    //       // add old row to new row
-    //       rowSize = oldMatrixRow.size();
-    //       for(i = 0; i < rowSize; i++) {
-    // 	col = oldMatrixRow[i].col;
-    // 	if(col == DOFMatrix::NO_MORE_ENTRIES) break;
-    // 	if(col == DOFMatrix::UNUSED_ENTRY) continue;
-    // 	newCol = ((*associated_)[col] == -1) ? col : (*associated_)[col];
-    // 	entry = oldMatrixRow[i].entry;
-    // 	matrix->addSparseDOFEntry(1.0, newRow, newCol, entry, true);
-    //       }      
-    //     }
-    //   }
-
-
-    //   DOFVector<DegreeOfFreedom>::Iterator rowIt(associated_, USED_DOFS);
-    //   DOFVector<DegreeOfFreedom>::Iterator colIt(associated_, USED_DOFS);
-
-
-    //   Mesh *mesh = matrix->getRowFESpace()->getMesh();
 
     ::std::vector< ::std::vector<MatEntry> >::iterator rowIt;
     ::std::vector< ::std::vector<MatEntry> >::iterator rowEnd = matrix->end();
@@ -346,16 +269,6 @@ namespace AMDiS {
       newDOF = (*associated_)[dof];
 
       if (dof < newDOF) {
-	// ---------- different assemblage style --------
-	//       (*vector)[newDOF] += (*vector)[dof];
-	//       (*vector)[dof] = 0.0;
-
-
-	// --- method 2 ----
-	//       //entry = (*vector)[dof];
-	//       (*vector)[dof] += (*vector)[newDOF];
-	//       (*vector)[newDOF] = (*vector)[dof];
-
 	entry = ((*vector)[dof] + (*vector)[newDOF]) * 0.5;
 	(*vector)[dof] = entry;
 	(*vector)[newDOF] = entry;
diff --git a/AMDiS/src/ProblemInstat.h b/AMDiS/src/ProblemInstat.h
index 799aef40cd18c9d35fd85b91797e7eadc7042e0a..9d153b323fbbedbaff052181da334344742d9c86 100644
--- a/AMDiS/src/ProblemInstat.h
+++ b/AMDiS/src/ProblemInstat.h
@@ -161,9 +161,7 @@ namespace AMDiS {
      * Used in \ref initialize().
      */
     virtual void createUhOld();
-
-  
-
+ 
     /** \brief
      * Implementation of ProblemTimeInterface::initTimestep().
      */
@@ -177,12 +175,16 @@ namespace AMDiS {
     /** \brief
      * Returns \ref problemStat.
      */
-    inline ProblemScal* getStatProblem() { return problemStat; };
+    inline ProblemScal* getStatProblem() { 
+      return problemStat; 
+    };
 
     /** \brief
      * Returns \ref oldSolution.
      */
-    inline DOFVector<double> *getOldSolution() { return oldSolution; };
+    inline DOFVector<double> *getOldSolution() { 
+      return oldSolution; 
+    };
 
     /** \brief
      * Used by \ref problemInitial
@@ -261,12 +263,16 @@ namespace AMDiS {
     /** \brief
      * Returns \ref problemStat.
      */
-    inline ProblemVec* getStatProblem() { return problemStat; };
+    inline ProblemVec* getStatProblem() { 
+      return problemStat; 
+    };
 
     /** \brief
      * Returns \ref oldSolution.
      */
-    inline SystemVector *getOldSolution() { return oldSolution; };
+    inline SystemVector *getOldSolution() { 
+      return oldSolution; 
+    };
 
     /** \brief
      * Used by \ref problemInitial
diff --git a/AMDiS/src/ProblemVec.h b/AMDiS/src/ProblemVec.h
index ad765bdeeed329a03d88e5e8a90de60de88919fa..bbfbf6d1aae6236476096113f9bfba6229ef9854 100644
--- a/AMDiS/src/ProblemVec.h
+++ b/AMDiS/src/ProblemVec.h
@@ -337,6 +337,13 @@ namespace AMDiS {
       return feSpaces_; 
     };
 
+    /** \brief
+     * Returns \ref componentSpaces_;
+     */
+    inline ::std::vector<FiniteElemSpace*> getComponentFESpaces() {
+      return componentSpaces_;
+    }
+
     /** \brief
      * Returns \ref estimator_.
      */
diff --git a/AMDiS/src/QPInfo.cc b/AMDiS/src/QPInfo.cc
index fe4171bdb959dd1dd5fbf42f5f975ecc491940d5..16016bad560d1b6603ad2900eb2cd1b12387f1e5 100644
--- a/AMDiS/src/QPInfo.cc
+++ b/AMDiS/src/QPInfo.cc
@@ -100,7 +100,7 @@ namespace AMDiS {
       int i;
       for(i = 0; i < numPoints; i++) {
 	const DimVec<double>& lambda = quadrature_->getLambda(i);
-	TEST_EXIT(currentElInfo_)("currentElInfo_ not set\n");
+	TEST_EXIT_DBG(currentElInfo_)("currentElInfo_ not set\n");
 	currentElInfo_->coordToWorld(lambda, &coordsAtQPs_[i]);
       }
       coordsNumPointsValid_ = numPoints;
@@ -114,7 +114,7 @@ namespace AMDiS {
   {
     // check fast quadrature
     if(quadFast) {
-      TEST_EXIT(quadrature_ == quadFast->getQuadrature())
+      TEST_EXIT_DBG(quadrature_ == quadFast->getQuadrature())
 	("quadrature_ != quadFast->quadrature\n");
     }
   
@@ -153,7 +153,7 @@ namespace AMDiS {
   {
     // check fast quadrature
     if(quadFast) {
-      TEST_EXIT(quadrature_ == quadFast->getQuadrature())
+      TEST_EXIT_DBG(quadrature_ == quadFast->getQuadrature())
 	("quadrature_ != quadFast->quadrature\n");
     }
   
@@ -192,7 +192,7 @@ namespace AMDiS {
   {
     // check fast quadrature
     if(quadFast) {
-      TEST_EXIT(quadrature_ == quadFast->getQuadrature())
+      TEST_EXIT_DBG(quadrature_ == quadFast->getQuadrature())
 	("quadrature_ != quadFast->quadrature\n");
     }
   
@@ -227,7 +227,7 @@ namespace AMDiS {
 
   WorldVector<double> **QPInfo::getElementNormalAtQPs(int numPoints) 
   {
-    TEST_EXIT(currentElInfo_)("currentElInfo_ not set\n");
+    TEST_EXIT_DBG(currentElInfo_)("currentElInfo_ not set\n");
 
     int i;
     if(currentElInfo_->getParametricOrder() > 1) {
@@ -264,7 +264,7 @@ namespace AMDiS {
 
   DimVec<WorldVector<double> > **QPInfo::getGrdLambdaAtQPs(int numPoints) 
   {
-    TEST_EXIT(currentElInfo_)("currentElInfo_ not set\n");
+    TEST_EXIT_DBG(currentElInfo_)("currentElInfo_ not set\n");
 
     int i;
     if(currentElInfo_->getParametricOrder() > 1) {
@@ -331,7 +331,7 @@ namespace AMDiS {
 	quad = quadFast->getQuadrature();
       }    
     }
-    TEST_EXIT(quad)("no quadrature\n");
+    TEST_EXIT_DBG(quad)("no quadrature\n");
     if(qpInfos_[quad]) {
       DELETE qpInfos_[quad];
       qpInfos_.erase(quad);
diff --git a/AMDiS/src/QPsiPhi.cc b/AMDiS/src/QPsiPhi.cc
index 0951d1de5530e0378403f62190eec1ecf61b6089..800de1f96d013cf1d30bc9db5a1133068ca718e0 100644
--- a/AMDiS/src/QPsiPhi.cc
+++ b/AMDiS/src/QPsiPhi.cc
@@ -109,23 +109,23 @@ namespace AMDiS {
     // and now, fill information                                                *
     //***************************************************************************
 
-    for(i = 0; i < n_psi; i++) {
-      for(j = 0; j < n_phi; j++) {
+    for (i = 0; i < n_psi; i++) {
+      for (j = 0; j < n_phi; j++) {
 	values[i][j] = val_vec; 
 	k[i][j]     = k_vec;
 	l[i][j]     = l_vec;
 
-	for(n = lk = 0; lk < d+1; lk++) {
-	  for(ll =  0; ll < d+1; ll++) {
-	    for(val = iq = 0; iq < numPoints; iq++) {
+	for (n = lk = 0; lk < d+1; lk++) {
+	  for (ll =  0; ll < d+1; ll++) {
+	    for (val = iq = 0; iq < numPoints; iq++) {
 	      grdi = q_psi->getGradient(iq,i,lk);
 	      grdj = q_phi->getGradient(iq,j,ll);
 
 	      val += quadrature->getWeight(iq)*grdi*grdj;
 	    }
 	    if (abs(val) > TOO_SMALL) {
-	      TEST_EXIT(all_entries-- > 0)
-		("now more entries found than counted before\n");
+	      TEST_EXIT_DBG(all_entries > 0)("now more entries found than counted before\n");
+	      all_entries--;		
 	      n++;
 	      *val_vec = val;
 	      val_vec++;
@@ -294,8 +294,8 @@ namespace AMDiS {
 	    val += quadrature->getWeight(iq)*psij*grdi;
 	  }
 	  if (abs(val) > TOO_SMALL) {
-	    TEST_EXIT(all_entries-- > 0)
-	      ("now more entries found than counted before\n");
+	    TEST_EXIT_DBG(all_entries > 0)("now more entries found than counted before\n");
+	    all_entries--;
 	    n++;
 	    *val_vec++ = val;
 	    *k_vec++ = lk;
@@ -455,8 +455,8 @@ namespace AMDiS {
 	    val += quadrature->getWeight(iq)*grdj*psii;
 	  }
 	  if (abs(val) > TOO_SMALL) {
-	    TEST_EXIT(all_entries-- > 0)
-	      ("now more entries found than counted before\n");
+	    TEST_EXIT_DBG(all_entries > 0)("now more entries found than counted before\n");
+	    all_entries--;
 	    n++;
 	    *val_vec++ = val;
 	    *l_vec++ = ll;
@@ -787,8 +787,8 @@ namespace AMDiS {
 	  val += quadrature->getWeight(iq)*grdi;
 	}
 	if (abs(val) > TOO_SMALL) {
-	  TEST_EXIT(all_entries-- > 0)
-	    ("now more entries found than counted before\n");
+	  TEST_EXIT_DBG(all_entries > 0)("now more entries found than counted before\n");
+	  all_entries--;
 	  n++;
 	  *val_vec = val;
 	  val_vec++;
diff --git a/AMDiS/src/Quadrature.h b/AMDiS/src/Quadrature.h
index 32c17f62879bacb728fedd4b0b984d226d153759..06ba66ddaa44f0193a03f5bce1f4d5095bf1e56d 100644
--- a/AMDiS/src/Quadrature.h
+++ b/AMDiS/src/Quadrature.h
@@ -410,15 +410,15 @@ namespace AMDiS {
     void init(Flag init_flag);
 
     inline bool initialized(Flag flag) {
-      if(flag == INIT_PHI) {
+      if (flag == INIT_PHI) {
 	return (phi != NULL);
       }
 
-      if(flag == INIT_GRD_PHI) {
+      if (flag == INIT_GRD_PHI) {
 	return (grdPhi != NULL);
       }
 
-      if(flag == INIT_D2_PHI) {
+      if (flag == INIT_D2_PHI) {
 	return (D2Phi != NULL);
       }
 
@@ -429,12 +429,16 @@ namespace AMDiS {
     /** \brief
      * Returns \ref quadrature
      */
-    inline const Quadrature* getQuadrature() const { return quadrature; };
+    inline const Quadrature* getQuadrature() const { 
+      return quadrature; 
+    };
 
     /** \brief
      * Returns \ref max_points
      */
-    inline int getMaxQuadPoints() { return max_points; };
+    inline int getMaxQuadPoints() { 
+      return max_points; 
+    };
 
     /** \brief
      * Returns (*\ref D2Phi)[q][i][j][m]
@@ -531,44 +535,9 @@ namespace AMDiS {
     /** \brief
      * Returns \ref basisFunctions
      */
-    inline BasisFunction* getBasisFunctions() const { return basisFunctions; };
-
-    /** \brief
-     * The function returns a pointer ptr to a vector of length 
-     * \ref quadrature->n_points storing the values of \f$ u_h \f$ at all 
-     * quadrature points of \ref quadrature, i.e. 
-     * \f[ ptr[l] = u_h(quadrature->lambda[l]) \f] where 
-     * l = 0, . . . , quadrature->n_points - 1; the \ref INIT_PHI flag must 
-     * be set in \ref init_flag; vec is an optional memory pointer
-     */
-    //   const double *uhAtQp(const double *uh_loc, double *vec) const;
-
-    /** \brief
-     * The function returns a pointer ptr to a vector of length 
-     * quadrature->n_points WorldVectors storing \f$ \nabla u_h \f$ at all 
-     * quadrature points of \ref quadrature, i.e.
-     * \f[ ptr[l][i] = u_{h,xi}(quadrature->lambda[l]) \f]
-     * where l = 0, ... , quadrature->n_points - 1, and i = 0, ... , 
-     * DIM_OF_WORLD - 1; the \ref INIT_GRD_PHI flag must be set in 
-     * \ref init flag; vec is an optional memory pointer
-     */
-    //   const WorldVector<double> *grdUhAtQp(const DimVec<WorldVector<double> >& Lambda, 
-    //   				       const double *uh_loc, 
-    //   				       WorldVector<double> *vec) const;
-
-
-    /** \brief
-     * The function returns a pointer ptr to a vector of length 
-     * quadrarure->n_points of WorldMatrices storing D2uh at all quadrature 
-     * points of \ref quadrature, i.e.
-     * \f[ ptr[l][i][j] = u_{h,x_ix_j}(quadrature->lambda[l]) \f]
-     * where l = 0, ... , quadrature->n_points - 1, and i, j = 0, ... , 
-     * DIM_OF_WORLD - 1; the \ref INIT_D2_PHI flag must be set in 
-     * \ref init flag; vec is an optional memory pointer
-     */
-    //   const WorldMatrix<double> *D2UhAtQp(const DimVec<WorldVector<double> >& Lambda, 
-    //   				      const double *uh_loc, 
-    //   				      WorldMatrix<double> *vec) const;
+    inline BasisFunction* getBasisFunctions() const { 
+      return basisFunctions; 
+    };
 
   protected:
     /** \brief
diff --git a/AMDiS/src/Recovery.cc b/AMDiS/src/Recovery.cc
index 6c23ea09fbf17812f864427722744937237e92c3..e65cc77f1257c5078618c34d8c8ea3dcbd1940aa 100644
--- a/AMDiS/src/Recovery.cc
+++ b/AMDiS/src/Recovery.cc
@@ -237,7 +237,7 @@ int Recovery::set_exponents(int degree)
       ERROR_EXIT("Which dimension have your world???\n");
     }
 
-  TEST_EXIT(count==n_monomials)("There must be an error!\n");
+  TEST_EXIT_DBG(count == n_monomials)("There must be an error!\n");
 
   // Setting matrix of monomials.
   WorldVector<int> sum;
@@ -261,7 +261,7 @@ void Recovery::compute_integrals(DOFVector<double> *uh, ElInfo *elInfo,
 {
   FUNCNAME("Recovery::compute_integrals");
 
-  TEST_EXIT(!(f_vec && f_scal))("Only one diffusion function, please!\n");
+  TEST_EXIT_DBG(!(f_vec && f_scal))("Only one diffusion function, please!\n");
 
   int    i, j, k;
   double sum;
@@ -367,9 +367,9 @@ void Recovery::compute_interior_sums(DOFVector<double> *uh, ElInfo *elInfo,
 {
   FUNCNAME("Recovery::compute_sums");
 
-  TEST_EXIT(gradient)("SPR of solution need computing node sums.\n");
+  TEST_EXIT_DBG(gradient)("SPR of solution need computing node sums.\n");
 
-  TEST_EXIT(!(f_vec && f_scal))("Only one diffusion function, please!\n");
+  TEST_EXIT_DBG(!(f_vec && f_scal))("Only one diffusion function, please!\n");
 
   int    i, j, k;
   double sum;
@@ -434,10 +434,10 @@ void Recovery::compute_node_sums(DOFVector<double> *uh, ElInfo *elInfo,
 {
   FUNCNAME("Recovery::compute_sums");
 
-  TEST_EXIT(!gradient)
+  TEST_EXIT_DBG(!gradient)
     ("SPR of flux or gradient need computing interior sums\n");
 
-  TEST_EXIT(feSpace->getMesh()->getDim()==1)
+  TEST_EXIT_DBG(feSpace->getMesh()->getDim()==1)
     ("At the moment only for linear finite elements.\n");
 
   int i, j, l;
@@ -477,7 +477,7 @@ void Recovery::compute_sums_linear(DOFVector<double> *uh, ElInfo *elInfo,
 {
   FUNCNAME("Recovery::compute_sums_linear");
 
-  TEST_EXIT(!gradient)
+  TEST_EXIT_DBG(!gradient)
     ("SPR of flux or gradient need computing interior sums\n");
 
   int             i, j, l;
@@ -606,7 +606,7 @@ void Recovery::fill_struct_vec(DOFVector<double> *uh,
 	    interior_vertices[n_neighbors++] = k;
 	}
 
-      TEST_EXIT(n_neighbors)
+      TEST_EXIT_DBG(n_neighbors)
 	("Each element should have a least one interior vertex!\n");
 
       for (i=0; i<n_vertices; i++)     // Handling nodes on vertices.
@@ -918,10 +918,13 @@ Recovery::recovery(DOFVector<double> *uh, const FiniteElemSpace *fe_space,
   // Solving local systems.
   for (SV_it.reset(); !SV_it.end(); ++SV_it)
     {
-      if ((*SV_it).A)
-	TEST_EXIT(Cholesky::solve((*SV_it).A, (*SV_it).rec_grdUh,
-				  (*SV_it).rec_grdUh))
+      if ((*SV_it).A) {
+	int error = Cholesky::solve((*SV_it).A, 
+				    (*SV_it).rec_grdUh,
+				    (*SV_it).rec_grdUh);
+	TEST_EXIT_DBG(error)
 	  ("There must be some error, matrix is not positive definite.\n");
+      }
     }
 
   // define result vector
@@ -974,7 +977,7 @@ Recovery::recovery(DOFVector<double> *uh,
 {
   FUNCNAME("Recovery::simpleAveraging");
 
-  TEST_EXIT(!(f_vec && f_scal))("Only one diffusion function, please!\n");
+  TEST_EXIT_DBG(!(f_vec && f_scal))("Only one diffusion function, please!\n");
 
   const FiniteElemSpace *fe_space = uh->getFESpace();
 
diff --git a/AMDiS/src/RefinementManager2d.cc b/AMDiS/src/RefinementManager2d.cc
index b42e95325e1df018c6d74f470c01eb8710c72aa0..a4223e9cc0e8040521e9159f48120d173a082298 100644
--- a/AMDiS/src/RefinementManager2d.cc
+++ b/AMDiS/src/RefinementManager2d.cc
@@ -82,7 +82,7 @@ namespace AMDiS {
 					       &n_neigh,
 					       &n_neigh_periodic);
 
-      TEST_EXIT(periodicList)("periodicList = NULL\n");
+      TEST_EXIT_DBG(periodicList)("periodicList = NULL\n");
 
       newDOF = 
 	refinePatch(edge, periodicList, n_neigh_periodic, bound);
@@ -338,7 +338,7 @@ namespace AMDiS {
 					   DegreeOfFreedom* newDOFs[3])
   {
     FUNCNAME("RefinementManager2d::bisectTriangle()");
-    TEST_EXIT(mesh)("no mesh!\n");
+    TEST_EXIT_DBG(mesh)("no mesh!\n");
   
     Triangle *child[2];
 
@@ -445,11 +445,11 @@ namespace AMDiS {
       /*  now go back to the original element and refine the patch                */
       /****************************************************************************/
       *el_info = neigh_info = stack->traverseNeighbour2d(neigh_info, opp_vertex);
-      TEST_EXIT(neigh_info->getElement() == el)("invalid traverse_neighbour1\n");
+      TEST_EXIT_DBG(neigh_info->getElement() == el)("invalid traverse_neighbour1\n");
     }
   
     if (refineList->setElement(1, (*el_info)->getNeighbour(2))) {
-      TEST_EXIT((*el_info)->getOppVertex(2) == 2)
+      TEST_EXIT_DBG((*el_info)->getOppVertex(2) == 2)
 	("no compatible ref. edge after recursive refinement of neighbour\n");
       *n_neigh = 2;
     }
diff --git a/AMDiS/src/RefinementManager3d.cc b/AMDiS/src/RefinementManager3d.cc
index 17a1f2850071d1a559bd6259dcd3a8327d004bbf..57c0aadd277fd49fd29b60a57a842b547bec2e21 100644
--- a/AMDiS/src/RefinementManager3d.cc
+++ b/AMDiS/src/RefinementManager3d.cc
@@ -231,7 +231,7 @@ namespace AMDiS {
 		    node1 = 
 		      mesh->getNode(EDGE) + Tetrahedron::nChildEdge[n_type][j][opp_v-2];
 
-		    TEST_EXIT(neigh->getChild(j)->getDOF(node1))
+		    TEST_EXIT_DBG(neigh->getChild(j)->getDOF(node1))
 		      ("no dof on neighbour %d at node %d\n", 
 		       neigh->getChild(j)->getIndex(), node1);
 
@@ -243,7 +243,7 @@ namespace AMDiS {
 		    node0 = mesh->getNode(FACE) + i_neigh;
 		    node1 = mesh->getNode(FACE) + j_neigh;
 
-		    TEST_EXIT(neigh->getChild(j)->getDOF(node1))
+		    TEST_EXIT_DBG(neigh->getChild(j)->getDOF(node1))
 		      ("no dof on neighbour %d at node %d\n",
 		       neigh->getChild(j)->getIndex(), node1);
 
@@ -462,7 +462,7 @@ namespace AMDiS {
 	  for (k = 0; k < vertices; k++)
 	    if (mesh->indirectlyAssociated(neigh->getDOF(k, 0), edge[1][0]))  break;
 	    
-	  TEST_EXIT(j < vertices && k < vertices)
+	  TEST_EXIT_DBG(j < vertices && k < vertices)
 	    ("dof %d or dof %d not found on element %d with nodes (%d %d %d %d)\n", 
 	     edge[0][0], edge[1][0], neigh->getIndex(), neigh->getDOF(0,0),
 	     neigh->getDOF(1,0), neigh->getDOF(2,0), neigh->getDOF(3,0));
@@ -488,7 +488,7 @@ namespace AMDiS {
       // 	      for (k = 0; k < vertices; k++)
       // 		if (neigh->getDOF(k, 0) == (*associated)[edge[1][0]])  break;
 	      
-      // 	      TEST_EXIT(j < vertices && k < vertices)
+      // 	      TEST_EXIT_DBG(j < vertices && k < vertices)
       // 		("dof %d or dof %d not found on element %d with nodes (%d %d %d %d)\n", 
       // 		 edge[0][0], edge[1][0], neigh->getIndex(), neigh->getDOF(0,0),
       // 		 neigh->getDOF(1,0), neigh->getDOF(2,0), neigh->getDOF(3,0));
@@ -500,7 +500,7 @@ namespace AMDiS {
       // 	}
       //       }
 
-      TEST_EXIT(j <  mesh->getGeo(VERTEX) &&
+      TEST_EXIT_DBG(j <  mesh->getGeo(VERTEX) &&
 		k < mesh->getGeo(VERTEX))
 	("dof %d or dof %d not found on element %d with nodes (%d %d %d %d)\n", 
 	 edge[0][0], edge[1][0], neigh->getIndex(), neigh->getDOF(0,0),
@@ -563,7 +563,7 @@ namespace AMDiS {
 	  /*  neigh is compatible devisible; put neigh to the list of patch elements; */
 	  /*  go to next neighbour                                                    */
 	  /****************************************************************************/
-	  TEST_EXIT(*n_neigh < mesh->getMaxEdgeNeigh())
+	  TEST_EXIT_DBG(*n_neigh < mesh->getMaxEdgeNeigh())
 	    ("too many neighbours %d in refine patch\n", *n_neigh);
 
       
@@ -609,7 +609,7 @@ namespace AMDiS {
     opp_v = refineList->getOppVertex(i, 0);
     do
       {
-	TEST_EXIT(neigh_info->getNeighbour(opp_v)  &&  i > 0)
+	TEST_EXIT_DBG(neigh_info->getNeighbour(opp_v)  &&  i > 0)
 	  ("while looping back domains boundary was reached or i == 0\n");
 	opp_v = refineList->getOppVertex(i--, 0);
 	neigh_info = stack->traverseNeighbour3d(neigh_info, opp_v);
@@ -699,7 +699,7 @@ namespace AMDiS {
 					     &n_neigh,
 					     &n_neigh_periodic);
 
-      TEST_EXIT(periodicList)("periodicList = NULL\n");
+      TEST_EXIT_DBG(periodicList)("periodicList = NULL\n");
 
       newDOF = 
 	refinePatch(edge, periodicList, n_neigh_periodic, bound);
diff --git a/AMDiS/src/SparseVector.h b/AMDiS/src/SparseVector.h
index 78a9d5c6a61cf592b59e221f4240b1658b94e0f4..f61c0f5326849b1a5d3fcfb406c8390390cce581 100644
--- a/AMDiS/src/SparseVector.h
+++ b/AMDiS/src/SparseVector.h
@@ -84,7 +84,7 @@ namespace AMDiS
 	  }
 	}
       } else {
-	TEST_EXIT(clients_.empty())("delete clients first\n");
+	TEST_EXIT_DBG(clients_.empty())("delete clients first\n");
 	delete logToPhys_;
 	delete physToLog_;
       }
diff --git a/AMDiS/src/SubQuadrature.h b/AMDiS/src/SubQuadrature.h
index 5eefd01d252a3433b80b0fabf510fc187174d36c..f83389b341c9df3668e0599cd237d4bac83dc53a 100644
--- a/AMDiS/src/SubQuadrature.h
+++ b/AMDiS/src/SubQuadrature.h
@@ -57,24 +57,26 @@ namespace AMDiS {
 	lambda = NEW VectorOfFixVecs<DimVec<double> >(dim, n_points, NO_INIT);
       }
 
-      TEST_EXIT(coords.getSize() == (subDim_ + 1))
+      TEST_EXIT_DBG(coords.getSize() == (subDim_ + 1))
 	("invalid number of scale coords or invalid quadrature dim\n");
-      TEST_EXIT(coords.getSizeOfFixVec() == (dim + 1))
+      TEST_EXIT_DBG(coords.getSizeOfFixVec() == (dim + 1))
 	("invalid coord dimension\n");
-      int i, j, k;
-      for(i=0; i < n_points; i++) {
+
+      for (int i = 0; i < n_points; i++) {
 	DimVec<double> origin = quad_->getLambda(i);
-	for(j=0; j < dim + 1; j++)
+	for (int j = 0; j < dim + 1; j++)
 	  (*lambda)[i][j] = 0.0;
-	for(j = 0; j < dim + 1; j++) {
-	  for(k = 0; k < subDim_ + 1; k++) {
+	for (int j = 0; j < dim + 1; j++) {
+	  for (int k = 0; k < subDim_ + 1; k++) {
 	    (*lambda)[i][j] += origin[k] * coords[k][j];
 	  }
 	}
       }  
     };
 
-    inline int getSubDim() { return subDim_; };
+    inline int getSubDim() { 
+      return subDim_;
+    };
 
   protected:
     Quadrature *quad_;
diff --git a/AMDiS/src/SystemVector.h b/AMDiS/src/SystemVector.h
index 8c532cb3ac19220c05810ec58d4f5a3737f54382..4b0ab3e158fb7d4706255aabab961e4629e86c31 100644
--- a/AMDiS/src/SystemVector.h
+++ b/AMDiS/src/SystemVector.h
@@ -145,15 +145,15 @@ namespace AMDiS {
      * Sets \ref vectors[index] = vec.
      */ 
     inline void setDOFVector(int index, DOFVector<double> *vec) {
-      TEST_EXIT(index < vectors.getSize())("invalid index\n");
+      TEST_EXIT_DBG(index < vectors.getSize())("invalid index\n");
       vectors[index] = vec;
     };
 
     /** \brief
      * Returns \ref vectors[index].
      */
-    inline DOFVector<double> *getDOFVector(int index) {
-      TEST_EXIT(index < vectors.getSize())("invalid index\n");
+    inline DOFVector<double> *getDOFVector(int index) {      
+      TEST_EXIT_DBG(index < vectors.getSize())("invalid index\n");
       return vectors[index];
     };
 
@@ -161,7 +161,7 @@ namespace AMDiS {
      * Returns \ref vectors[index].
      */
     inline const DOFVector<double> *getDOFVector(int index) const {
-      TEST_EXIT(index < vectors.getSize())("invalid index\n");
+      TEST_EXIT_DBG(index < vectors.getSize())("invalid index\n");
       return vectors[index];
     };
 
@@ -190,7 +190,9 @@ namespace AMDiS {
     /** \brief
      * Returns \ref feSpace.
      */
-    inline FiniteElemSpace *getFESpace(int i) const { return feSpace[i]; };
+    inline FiniteElemSpace *getFESpace(int i) const { 
+      return feSpace[i]; 
+    };
 
     /** \brief
      * Here the system vector is interpreted as one large vector. The given
@@ -248,8 +250,7 @@ namespace AMDiS {
      * Assignement operator.
      */
     inline SystemVector& operator=(const SystemVector& rhs) {
-      TEST_EXIT(rhs.vectors.getSize() == vectors.getSize())
-	("invalied sizes\n");
+      TEST_EXIT_DBG(rhs.vectors.getSize() == vectors.getSize())("invalied sizes\n");
       int i, size = vectors.getSize();
       for(i = 0; i < size; i++) {
 	(*(vectors[i])) = (*(rhs.getDOFVector(i)));
@@ -279,7 +280,7 @@ namespace AMDiS {
 
     void copy(const SystemVector& rhs) {
       int i, size = vectors.getSize();
-      TEST_EXIT(size == rhs.getNumVectors())("invalid sizes\n");
+      TEST_EXIT_DBG(size == rhs.getNumVectors())("invalid sizes\n");
       for(i = 0; i < size; i++) {
 	vectors[i]->copy(*(const_cast<SystemVector&>(rhs).getDOFVector(i)));
       }
@@ -333,8 +334,8 @@ namespace AMDiS {
    * scalar product
    */
   inline double operator*(SystemVector& x, SystemVector& y) {
-    TEST_EXIT(x.getNumVectors() == y.getNumVectors())
-      ("invalid size\n");
+    TEST_EXIT_DBG(x.getNumVectors() == y.getNumVectors())
+          ("invalid size\n");
     double result = 0.0;
     int i, size = x.getNumVectors();
     for(i = 0; i < size; i++) {
@@ -349,8 +350,8 @@ namespace AMDiS {
   inline const SystemVector& operator+=(SystemVector& x, 
 					const SystemVector& y) 
   {
-    TEST_EXIT(x.getNumVectors() == y.getNumVectors())
-      ("invalid size\n");
+    TEST_EXIT_DBG(x.getNumVectors() == y.getNumVectors())
+          ("invalid size\n");
     int i, size = x.getNumVectors();
     for(i = 0; i < size; i++) {
       (*(x.getDOFVector(i))) += (*(y.getDOFVector(i)));
@@ -364,8 +365,8 @@ namespace AMDiS {
   inline const SystemVector& operator-=(SystemVector& x, 
 					SystemVector& y) 
   {
-    TEST_EXIT(x.getNumVectors() == y.getNumVectors())
-      ("invalid size\n");
+    TEST_EXIT_DBG(x.getNumVectors() == y.getNumVectors())
+          ("invalid size\n");
     int i, size = x.getNumVectors();
     for(i = 0; i < size; i++) {
       (*(x.getDOFVector(i))) -= (*(y.getDOFVector(i)));
@@ -403,7 +404,7 @@ namespace AMDiS {
   inline SystemVector operator+(const SystemVector& x,
 				const SystemVector& y)
   {
-    TEST_EXIT(x.getNumVectors() == y.getNumVectors())
+    TEST_EXIT_DBG(x.getNumVectors() == y.getNumVectors())
       ("invalid size\n");
     SystemVector result = x;
     int i, size = x.getNumVectors();
@@ -470,9 +471,9 @@ namespace AMDiS {
   {
     int size = x.getNumVectors();
 
-    TEST_EXIT(size == result.getNumVectors())("incompatible sizes\n");
-    TEST_EXIT(size == matrix.getNumRows())("incompatible sizes\n");
-    TEST_EXIT(size == matrix.getNumCols())("incompatible sizes\n");
+    TEST_EXIT_DBG(size == result.getNumVectors())("incompatible sizes\n");
+    TEST_EXIT_DBG(size == matrix.getNumRows())("incompatible sizes\n");
+    TEST_EXIT_DBG(size == matrix.getNumCols())("incompatible sizes\n");
     
     for (int i = 0; i < size; i++) {
       if (!add) 
@@ -495,8 +496,8 @@ namespace AMDiS {
    */
   inline void axpy(double a, SystemVector& x, SystemVector& y)
   {
-    TEST_EXIT(x.getNumVectors() == y.getNumVectors())
-      ("invalid size\n");
+    TEST_EXIT_DBG(x.getNumVectors() == y.getNumVectors())
+          ("invalid size\n");
 
     int size = x.getNumVectors();
 
@@ -510,8 +511,8 @@ namespace AMDiS {
    */
   inline void xpay(double a, SystemVector& x, SystemVector& y)
   {
-    TEST_EXIT(x.getNumVectors() == y.getNumVectors())
-      ("invalid size\n");
+    TEST_EXIT_DBG(x.getNumVectors() == y.getNumVectors())
+          ("invalid size\n");
     int size = x.getNumVectors();
 
     for (int i = 0; i < size; i++) {
diff --git a/AMDiS/src/Tetrahedron.cc b/AMDiS/src/Tetrahedron.cc
index d8acb41de0e9179633f79e6b9dce4de7644a923f..4387884612cacdd03595a3f8007a435e99009a61 100644
--- a/AMDiS/src/Tetrahedron.cc
+++ b/AMDiS/src/Tetrahedron.cc
@@ -62,8 +62,8 @@ namespace AMDiS {
 
   bool Tetrahedron::hasSide(Element* sideElem) const
   {
-    FUNCNAME("Tetrahedron::hasSide");
-    TEST_EXIT(sideElem->isTriangle())("called for sideElem-type != Triangle\n");
+    FUNCNAME("Tetrahedron::hasSide()");
+    TEST_EXIT_DBG(sideElem->isTriangle())("called for sideElem-type != Triangle\n");
     ERROR_EXIT("not yet\n");
     return false;
   }
diff --git a/AMDiS/src/Tetrahedron.h b/AMDiS/src/Tetrahedron.h
index 330a9a70735c41777a71ea473a8f98263222c696..c638717f668b5f39eae9ebcc158621263533b7dc 100644
--- a/AMDiS/src/Tetrahedron.h
+++ b/AMDiS/src/Tetrahedron.h
@@ -201,9 +201,9 @@ namespace AMDiS {
      */
     virtual int getSideOfChild(int child, int side, int elType = 0) const {
       FUNCNAME("Tetrahedron::getSideOfChild()");
-      TEST_EXIT(child==0 || child==1)("child must be in (0,1)\n");
-      TEST_EXIT(side >= 0 && side <= 3)("side must be between 0 and 3\n");
-      TEST_EXIT(elType >= 0 && elType <= 2)("elType must be between 0 and 2\n");
+      TEST_EXIT_DBG(child==0 || child==1)("child must be in (0,1)\n");
+      TEST_EXIT_DBG(side >= 0 && side <= 3)("side must be between 0 and 3\n");
+      TEST_EXIT_DBG(elType >= 0 && elType <= 2)("elType must be between 0 and 2\n");
       return sideOfChild[elType][child][side];
     };
 
@@ -212,15 +212,15 @@ namespace AMDiS {
      */
     virtual int getVertexOfParent(int child, int side, int elType = 0) const {
       FUNCNAME("Tetrahedron::getVertexOfParent()");
-      TEST_EXIT(child==0 || child==1)("child must be in (0,1)\n");
-      TEST_EXIT(side >= 0 && side <= 3)("side must be between 0 and 3\n");
-      TEST_EXIT(elType >= 0 && elType <= 2)("elType must be between 0 and 2\n");
+      TEST_EXIT_DBG(child==0 || child==1)("child must be in (0,1)\n");
+      TEST_EXIT_DBG(side >= 0 && side <= 3)("side must be between 0 and 3\n");
+      TEST_EXIT_DBG(elType >= 0 && elType <= 2)("elType must be between 0 and 2\n");
       return vertexOfParent[elType][child][side];
     };
 
     inline int getEdgeOfFace(int face, int edge) const {
-      TEST_EXIT(face >= 0 && face < 4)("invalid face\n");
-      TEST_EXIT(edge >= 0 && edge < 3)("invalid edge\n");
+      TEST_EXIT_DBG(face >= 0 && face < 4)("invalid face\n");
+      TEST_EXIT_DBG(edge >= 0 && edge < 3)("invalid edge\n");
       return edgeOfFace[face][edge];
     };
 
@@ -236,8 +236,14 @@ namespace AMDiS {
      */
     static const int vertexOfFace[4][3];
 
+    /** \brief
+     *
+     */
     static const int sideOfChild[3][2][4];
-  
+
+    /** \brief
+     *
+     */  
     static const int vertexOfParent[3][2][4];
   };
 
diff --git a/AMDiS/src/Traverse.cc b/AMDiS/src/Traverse.cc
index 8a7ead5096955e28ec8ea082aafb2667b3e948f8..51786ff9e5fff95022d9ea2674069a1b11b87969 100644
--- a/AMDiS/src/Traverse.cc
+++ b/AMDiS/src/Traverse.cc
@@ -33,7 +33,7 @@ namespace AMDiS {
     elinfo_stack[1]->setMesh(mesh);
 
     if (fill_flag.isSet(Mesh::CALL_LEAF_EL_LEVEL)) {
-      TEST_EXIT(level >= 0)("invalid level: %d\n", level);
+      TEST_EXIT_DBG(level >= 0)("invalid level: %d\n", level);
     }
 
     traverse_mel = NULL;
@@ -57,10 +57,10 @@ namespace AMDiS {
       if (parametric) 
 	elinfo_old = parametric->removeParametricInfo(elinfo_old);
 
-      TEST_EXIT(elinfo_old == elinfo_stack[stack_used])("invalid old elinfo\n");
+      TEST_EXIT_DBG(elinfo_old == elinfo_stack[stack_used])("invalid old elinfo\n");
     }
     else {
-      TEST_EXIT(elinfo_old == NULL)("invalid old elinfo != nil\n");
+      TEST_EXIT_DBG(elinfo_old == NULL)("invalid old elinfo != nil\n");
     }
 
     if (traverse_fill_flag.isSet(Mesh::CALL_LEAF_EL)) 
@@ -300,7 +300,7 @@ namespace AMDiS {
   
     // create new elinfos
     for(i=stack_size; i < new_stack_size; i++) {
-      TEST_EXIT(elinfo_stack[i]==NULL)("???\n");
+      TEST_EXIT_DBG(elinfo_stack[i]==NULL)("???\n");
       elinfo_stack[i] = traverse_mesh->createNewElInfo();
     }
 
@@ -313,7 +313,7 @@ namespace AMDiS {
 
     // create new elinfos
     for(i=stack_size; i < new_stack_size; i++) {
-      TEST_EXIT(save_elinfo_stack[i]==NULL)("???\n");
+      TEST_EXIT_DBG(save_elinfo_stack[i]==NULL)("???\n");
       save_elinfo_stack[i] = traverse_mesh->createNewElInfo();
     }
     save_info_stack.resize(new_stack_size);
@@ -383,7 +383,7 @@ namespace AMDiS {
       stack_used++;
       
       
-      TEST_EXIT(stack_used < stack_size)
+      TEST_EXIT_DBG(stack_used < stack_size)
 	("stack_size=%d too small, level=(%d,%d)\n",
 	 stack_size, elinfo_stack[stack_used]->getLevel());
       
@@ -465,7 +465,7 @@ namespace AMDiS {
     //   elinfo_stack[stack_used + 1]->fillElInfo(i, elinfo_stack[stack_used]);
     //   stack_used++;
 
-    //   TEST_EXIT(stack_used < stack_size)
+    //   TEST_EXIT_DBG(stack_used < stack_size)
     //     ("stack_size=%d too small, level=%d\n",
     //      stack_size, elinfo_stack[stack_used]->getLevel());
 
@@ -536,7 +536,7 @@ namespace AMDiS {
     elinfo_stack[stack_used + 1]->fillElInfo(i, elinfo_stack[stack_used]);
     stack_used++;
 
-    TEST_EXIT(stack_used < stack_size)
+    TEST_EXIT_DBG(stack_used < stack_size)
       ("stack_size=%d too small, level=%d\n",
        stack_size, elinfo_stack[stack_used]->getLevel());
 
@@ -606,7 +606,7 @@ namespace AMDiS {
     elinfo_stack[stack_used + 1]->fillElInfo(i, elinfo_stack[stack_used]);
     stack_used++;
 
-    TEST_EXIT(stack_used < stack_size)
+    TEST_EXIT_DBG(stack_used < stack_size)
       ("stack_size=%d too small, level=%d\n",
        stack_size, elinfo_stack[stack_used]->getLevel());
 
@@ -715,16 +715,16 @@ namespace AMDiS {
 				     {{-2,-2,-2,-2}, {-1,2,3,1}, {-1,2,3,0}},
 				     {{-2,-2,-2,-2}, {-1,2,3,1}, {-1,2,3,0}}};
 
-    TEST_EXIT(stack_used > 0)("no current element\n");
+    TEST_EXIT_DBG(stack_used > 0)("no current element\n");
 
     Parametric *parametric = traverse_mesh->getParametric();
 
     if(parametric) elinfo_old = parametric->removeParametricInfo(elinfo_old);
 
-    TEST_EXIT(elinfo_old == elinfo_stack[stack_used])
+    TEST_EXIT_DBG(elinfo_old == elinfo_stack[stack_used])
       ("invalid old elinfo\n");
 
-    TEST_EXIT(elinfo_stack[stack_used]->getFillFlag().isSet(Mesh::FILL_NEIGH))
+    TEST_EXIT_DBG(elinfo_stack[stack_used]->getFillFlag().isSet(Mesh::FILL_NEIGH))
       ("FILL_NEIGH not set");
     el = elinfo_stack[stack_used]->getElement();
     sav_index = el->getIndex();
@@ -756,7 +756,7 @@ namespace AMDiS {
 	typ = dynamic_cast<ElInfo3d*>( elinfo_stack[stack_used])->getType();
 	nb = coarse_nb[typ][info_stack[stack_used]][nb];
 	if (nb == -1) break;
-	TEST_EXIT(nb >= 0)("invalid coarse_nb %d\n",nb);
+	TEST_EXIT_DBG(nb >= 0)("invalid coarse_nb %d\n",nb);
       }
 
     /* save hierarchy information about current element */
@@ -827,7 +827,7 @@ namespace AMDiS {
       }
 
       if (save_stack_used > stack2_used) { /* `refine' both el and el2 */
-	TEST_EXIT(el->getChild(0))("invalid NEW refinement?\n");
+	TEST_EXIT_DBG(el->getChild(0))("invalid NEW refinement?\n");
 
 	if (el->getDOF(0) == el2->getDOF(0))
 	  i = save_info_stack[stack2_used] - 1;
@@ -903,7 +903,7 @@ namespace AMDiS {
       MSG(" got element %d at %p with opp_vertex %d neigh %d\n",
 	  elinfo->getElement()->getIndex(), reinterpret_cast<void*>( elinfo->getElement()),
 	  opp_vertex, (elinfo->getNeighbour(opp_vertex))?(elinfo->getNeighbour(opp_vertex))->getIndex():-1);
-      TEST_EXIT(elinfo->getNeighbour(opp_vertex) == old_elinfo->getElement())
+      TEST_EXIT_DBG(elinfo->getNeighbour(opp_vertex) == old_elinfo->getElement())
 	("didn't succeed !?!?!?\n");
     }
 
@@ -932,15 +932,15 @@ namespace AMDiS {
 
     int     sav_index, sav_neighbour = neighbour;
 
-    TEST_EXIT(stack_used > 0)("no current element");
-    TEST_EXIT(traverse_fill_flag.isSet(Mesh::CALL_LEAF_EL))("invalid traverse_fill_flag");
+    TEST_EXIT_DBG(stack_used > 0)("no current element");
+    TEST_EXIT_DBG(traverse_fill_flag.isSet(Mesh::CALL_LEAF_EL))("invalid traverse_fill_flag");
 
     Parametric *parametric = traverse_mesh->getParametric();
 
     if (parametric) 
       elinfo_old = parametric->removeParametricInfo(elinfo_old);
 
-    TEST_EXIT(elinfo_old == elinfo_stack[stack_used])("invalid old elinfo");
+    TEST_EXIT_DBG(elinfo_old == elinfo_stack[stack_used])("invalid old elinfo");
 
     elinfo_stack[stack_used]->testFlag(Mesh::FILL_NEIGH);
     el = dynamic_cast<Triangle*>(const_cast<Element*>( elinfo_stack[stack_used]->getElement()));
@@ -982,7 +982,7 @@ namespace AMDiS {
 	stack_used--;
 	nb = coarse_nb[info_stack[stack_used]][nb];
 	if (nb == -1) break;
-	TEST_EXIT(nb >= 0)("invalid coarse_nb %d\n",nb);
+	TEST_EXIT_DBG(nb >= 0)("invalid coarse_nb %d\n",nb);
       }
 
     /****************************************************************************/
@@ -1051,11 +1051,11 @@ namespace AMDiS {
       }
 
       if (save_stack_used > stack2_used) { /* `refine' both el and el2 */
-	TEST_EXIT(el->getFirstChild())("invalid NEW refinement?");
+	TEST_EXIT_DBG(el->getFirstChild())("invalid NEW refinement?");
 
 	/* use child i, neighbour of el2->child[nb-1] */
 	i = 2 - save_info_stack[stack2_used];
-	TEST_EXIT(i < 2)("invalid OLD refinement?");
+	TEST_EXIT_DBG(i < 2)("invalid OLD refinement?");
 	info_stack[stack_used] = i+1;
 	elinfo_stack[stack_used+1]->fillElInfo(i, elinfo_stack[stack_used]);
 	stack_used++;
@@ -1087,7 +1087,7 @@ namespace AMDiS {
       MSG(" got element %d at %8X with opp_vertex %d neigh %d\n",
 	  elinfo->getElement()->getIndex(), elinfo->getElement(), opp_vertex,
 	  elinfo->getNeighbour(opp_vertex)?elinfo->getNeighbour(opp_vertex)->getIndex():-1);
-      TEST_EXIT(elinfo->getNeighbour(opp_vertex) == old_elinfo->getElement())
+      TEST_EXIT_DBG(elinfo->getNeighbour(opp_vertex) == old_elinfo->getElement())
 	("didn't succeed !?!?!?");
     }
     if (elinfo->getElement()->getFirstChild()) {
@@ -1116,7 +1116,7 @@ namespace AMDiS {
   {
     FUNCNAME("TraverseStack::update()");
 
-    TEST_EXIT(traverse_mesh->getDim() == 3)("update only in 3d\n");
+    TEST_EXIT_DBG(traverse_mesh->getDim() == 3)("update only in 3d\n");
 
     for (int i = stack_used; i > 0; i--) {
       dynamic_cast<ElInfo3d*>( elinfo_stack[i])->update();
diff --git a/AMDiS/src/Triangle.cc b/AMDiS/src/Triangle.cc
index 87cdc3188fde0ecfe5f52f4bbe7185d3182ec11c..3dadb36860d4751ae09ce7b6ae8ae19fdc63233a 100644
--- a/AMDiS/src/Triangle.cc
+++ b/AMDiS/src/Triangle.cc
@@ -13,7 +13,7 @@ namespace AMDiS {
   bool Triangle::hasSide(Element* sideElem) const
   {
     FUNCNAME("Triangle::hasSide");
-    TEST_EXIT(sideElem->isLine())("called for sideElem-type != Line\n");
+    TEST_EXIT_DBG(sideElem->isLine())("called for sideElem-type != Line\n");
     ERROR_EXIT("not yet\n");
     return false;
   }
diff --git a/AMDiS/src/Triangle.h b/AMDiS/src/Triangle.h
index e9a2a392a792d5933c1f46aac3a5a316068bbe52..9ca6fbf7448efb51352b83deac37642173de8aa6 100644
--- a/AMDiS/src/Triangle.h
+++ b/AMDiS/src/Triangle.h
@@ -137,8 +137,8 @@ namespace AMDiS {
      */
     virtual int getSideOfChild(int child, int side, int) const {
       FUNCNAME("Triangle::getSideOfChild()");
-      TEST_EXIT(child==0 || child==1)("child must be in (0,1)\n");
-      TEST_EXIT(side >= 0 && side <= 2)("side must be between 0 and 2\n");
+      TEST_EXIT_DBG(child==0 || child==1)("child must be in (0,1)\n");
+      TEST_EXIT_DBG(side >= 0 && side <= 2)("side must be between 0 and 2\n");
       return sideOfChild[child][side];
     };
 
@@ -147,8 +147,8 @@ namespace AMDiS {
      */
     virtual int getVertexOfParent(int child, int side, int=0) const {
       FUNCNAME("Triangle::getVertexOfParent()");
-      TEST_EXIT(child==0 || child==1)("child must be in (0,1)\n");
-      TEST_EXIT(side >= 0 && side <= 2)("side must be between 0 and 2\n");
+      TEST_EXIT_DBG(child==0 || child==1)("child must be in (0,1)\n");
+      TEST_EXIT_DBG(side >= 0 && side <= 2)("side must be between 0 and 2\n");
       return vertexOfParent[child][side];
     };
 
@@ -158,8 +158,8 @@ namespace AMDiS {
     };
 
     inline int getEdgeOfFace(int face, int edge) const {
-      TEST_EXIT(face == 0)("face must be zero at triangle\n");
-      TEST_EXIT(edge >= 0 && edge < 3)("invalid edge\n");
+      TEST_EXIT_DBG(face == 0)("face must be zero at triangle\n");
+      TEST_EXIT_DBG(edge >= 0 && edge < 3)("invalid edge\n");
       return edge;
     };