Index: src/Tesselation/BoundaryLineSet.cpp
===================================================================
--- src/Tesselation/BoundaryLineSet.cpp	(revision 2a3124b519027c588e363ec4c5a44171b4715777)
+++ src/Tesselation/BoundaryLineSet.cpp	(revision ce7bfd57176b8ad23e9bfcc393a41c4798df77ed)
@@ -42,5 +42,5 @@
   Nr(-1)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   for (int i = 0; i < 2; i++)
     endpoints[i] = NULL;
@@ -55,5 +55,5 @@
 BoundaryLineSet::BoundaryLineSet(BoundaryPointSet * const Point[2], const int number)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   // set number
   Nr = number;
@@ -66,5 +66,5 @@
   skipped = false;
   // clear triangles list
-  LOG(0, "New Line with endpoints " << *this << ".");
+  LOG(5, "DEBUG: New Line with endpoints " << *this << ".");
 }
 ;
@@ -80,5 +80,5 @@
   skipped(false)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   // set endpoints in ascending order
   SetEndpointsOrdered(endpoints, Point1, Point2);
@@ -87,5 +87,5 @@
   Point2->AddLine(this); //
   // clear triangles list
-  LOG(0, "New Line with endpoints " << *this << ".");
+  LOG(5, "DEBUG: New Line with endpoints " << *this << ".");
 }
 ;
@@ -97,5 +97,5 @@
 BoundaryLineSet::~BoundaryLineSet()
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   int Numbers[2];
 
@@ -144,6 +144,6 @@
 void BoundaryLineSet::AddTriangle(BoundaryTriangleSet * const triangle)
 {
-  Info FunctionInfo(__func__);
-  LOG(0, "Add " << triangle->Nr << " to line " << *this << ".");
+  //Info FunctionInfo(__func__);
+  LOG(5, "DEBUG: Add " << triangle->Nr << " to line " << *this << ".");
   triangles.insert(TrianglePair(triangle->Nr, triangle));
 }
@@ -156,5 +156,5 @@
 bool BoundaryLineSet::IsConnectedTo(const BoundaryLineSet * const line) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   if ((endpoints[0] == line->endpoints[0]) || (endpoints[1] == line->endpoints[0]) || (endpoints[0] == line->endpoints[1]) || (endpoints[1] == line->endpoints[1]))
     return true;
@@ -172,11 +172,11 @@
 bool BoundaryLineSet::CheckConvexityCriterion() const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   double angle = CalculateConvexity();
   if (angle > -MYEPSILON) {
-    LOG(0, "ACCEPT: Angle is greater than pi: convex.");
+    LOG(3, "ACCEPT: Angle is greater than pi: convex.");
     return true;
   } else {
-    LOG(0, "REJECT: Angle is less than pi: concave.");
+    LOG(3, "REJECT: Angle is less than pi: concave.");
     return false;
   }
@@ -190,5 +190,5 @@
 double BoundaryLineSet::CalculateConvexity() const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   Vector BaseLineCenter, BaseLineNormal, BaseLine, helper[2], NormalCheck;
   // get the two triangles
@@ -234,5 +234,5 @@
   //LOG(0, "INFO: BaselineNormal is " << BaseLineNormal << ".");
   if (NormalCheck.NormSquared() < MYEPSILON) {
-    LOG(0, "ACCEPT: Normalvectors of both triangles are the same: convex.");
+    LOG(3, "ACCEPT: Normalvectors of both triangles are the same: convex.");
     return true;
   }
@@ -248,5 +248,5 @@
 bool BoundaryLineSet::ContainsBoundaryPoint(const BoundaryPointSet * const point) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   for (int i = 0; i < 2; i++)
     if (point == endpoints[i])
@@ -262,5 +262,5 @@
 class BoundaryPointSet *BoundaryLineSet::GetOtherEndpoint(const BoundaryPointSet * const point) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   if (endpoints[0] == point)
     return endpoints[1];
@@ -278,5 +278,5 @@
 class BoundaryTriangleSet *BoundaryLineSet::GetOtherTriangle(const BoundaryTriangleSet * const triangle) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   if (triangles.size() == 2) {
     for (TriangleMap::const_iterator TriangleRunner = triangles.begin(); TriangleRunner != triangles.end(); ++TriangleRunner)
Index: src/Tesselation/BoundaryPointSet.cpp
===================================================================
--- src/Tesselation/BoundaryPointSet.cpp	(revision 2a3124b519027c588e363ec4c5a44171b4715777)
+++ src/Tesselation/BoundaryPointSet.cpp	(revision ce7bfd57176b8ad23e9bfcc393a41c4798df77ed)
@@ -45,5 +45,5 @@
   Nr(-1)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   LOG(1, "Adding noname.");
 }
@@ -59,6 +59,6 @@
   Nr(Walker->getNr())
 {
-  Info FunctionInfo(__func__);
-  LOG(1, "Adding Node " << *Walker);
+  //Info FunctionInfo(__func__);
+  LOG(5, "DEBUG: Adding Node " << *Walker);
 }
 ;
@@ -70,5 +70,5 @@
 BoundaryPointSet::~BoundaryPointSet()
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   //LOG(0, "Erasing point Nr. " << Nr << ".");
   if (!lines.empty())
@@ -83,6 +83,6 @@
 void BoundaryPointSet::AddLine(BoundaryLineSet * const line)
 {
-  Info FunctionInfo(__func__);
-  LOG(1, "Adding " << *this << " to line " << *line << ".");
+  //Info FunctionInfo(__func__);
+  LOG(5, "DEBUG: Adding " << *this << " to line " << *line << ".");
   if (line->endpoints[0] == this) {
     lines.insert(LinePair(line->endpoints[1]->Nr, line));
Index: src/Tesselation/BoundaryPolygonSet.cpp
===================================================================
--- src/Tesselation/BoundaryPolygonSet.cpp	(revision 2a3124b519027c588e363ec4c5a44171b4715777)
+++ src/Tesselation/BoundaryPolygonSet.cpp	(revision ce7bfd57176b8ad23e9bfcc393a41c4798df77ed)
@@ -44,5 +44,5 @@
   Nr(-1)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
 }
 ;
@@ -54,7 +54,7 @@
 BoundaryPolygonSet::~BoundaryPolygonSet()
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   endpoints.clear();
-  LOG(1, "Erasing polygon Nr." << Nr << " itself.");
+  LOG(5, "DEBUG: Erasing polygon Nr." << Nr << " itself.");
 }
 ;
@@ -67,5 +67,5 @@
 Vector * BoundaryPolygonSet::GetNormalVector(const Vector &OtherVector) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   // get normal vector
   Vector TemporaryNormal;
@@ -97,5 +97,5 @@
   if (TotalNormal->ScalarProduct(OtherVector) > 0.)
     TotalNormal->Scale(-1.);
-  LOG(1, "Normal Vector is " << *TotalNormal << ".");
+  LOG(4, "DEBUG: Normal Vector is " << *TotalNormal << ".");
 
   return TotalNormal;
@@ -109,5 +109,5 @@
 void BoundaryPolygonSet::GetCenter(Vector * const center) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   center->Zero();
   int counter = 0;
@@ -117,5 +117,5 @@
   }
   center->Scale(1. / (double) counter);
-  LOG(1, "Center is at " << *center << ".");
+  LOG(4, "DEBUG: Center of BoundaryPolygonSet is at " << *center << ".");
 }
 
@@ -126,5 +126,5 @@
 bool BoundaryPolygonSet::ContainsBoundaryTriangle(const BoundaryTriangleSet * const triangle) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   return ContainsPresentTupel(triangle->endpoints, 3);
 }
@@ -137,5 +137,5 @@
 bool BoundaryPolygonSet::ContainsBoundaryLine(const BoundaryLineSet * const line) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   return ContainsPresentTupel(line->endpoints, 2);
 }
@@ -148,13 +148,11 @@
 bool BoundaryPolygonSet::ContainsBoundaryPoint(const BoundaryPointSet * const point) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   for (PointSet::const_iterator Runner = endpoints.begin(); Runner != endpoints.end(); Runner++) {
-    LOG(0, "Checking against " << **Runner);
     if (point == (*Runner)) {
-      LOG(0, " Contained.");
+      LOG(4, "DEBUG: Checking against " << **Runner << ": Contained.");
       return true;
     }
   }
-  LOG(0, " Not contained.");
   return false;
 }
@@ -167,11 +165,10 @@
 bool BoundaryPolygonSet::ContainsBoundaryPoint(const TesselPoint * const point) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   for (PointSet::const_iterator Runner = endpoints.begin(); Runner != endpoints.end(); Runner++)
     if (point == (*Runner)->node) {
-      LOG(0, " Contained.");
+      LOG(4, "DEBUG: Checking against " << **Runner << ": Contained.");
       return true;
     }
-  LOG(0, " Not contained.");
   return false;
 }
@@ -185,9 +182,9 @@
 bool BoundaryPolygonSet::ContainsPresentTupel(const BoundaryPointSet * const * Points, const int dim) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   int counter = 0;
-  LOG(1, "Polygon is " << *this);
+  LOG(5, "DEBUG Polygon is " << *this);
   for (int i = 0; i < dim; i++) {
-    LOG(1, " Testing endpoint " << *Points[i]);
+    LOG(5, "DEBUG: Testing endpoint " << *Points[i]);
     if (ContainsBoundaryPoint(Points[i])) {
       counter++;
@@ -208,9 +205,9 @@
 bool BoundaryPolygonSet::ContainsPresentTupel(const PointSet &endpoints) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   size_t counter = 0;
-  LOG(1, "Polygon is " << *this);
+  LOG(5, "DEBUG: Polygon is " << *this);
   for (PointSet::const_iterator Runner = endpoints.begin(); Runner != endpoints.end(); Runner++) {
-    LOG(1, " Testing endpoint " << **Runner);
+    LOG(5, "DEBUG:  Testing endpoint " << **Runner);
     if (ContainsBoundaryPoint(*Runner))
       counter++;
@@ -239,5 +236,5 @@
 TriangleSet * BoundaryPolygonSet::GetAllContainedTrianglesFromEndpoints() const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   pair<TriangleSet::iterator, bool> Tester;
   TriangleSet *triangles = new TriangleSet;
@@ -250,9 +247,9 @@
           Tester = triangles->insert(Sprinter->second);
           if (Tester.second)
-            LOG(0, "Adding triangle " << *(Sprinter->second));
+            LOG(4, "DEBUG: Adding triangle " << *(Sprinter->second));
         }
       }
 
-  LOG(1, "The Polygon of " << endpoints.size() << " endpoints has " << triangles->size() << " unique triangles in total.");
+  LOG(3, "DEBUG: The Polygon of " << endpoints.size() << " endpoints has " << triangles->size() << " unique triangles in total.");
   return triangles;
 }
@@ -265,14 +262,14 @@
 bool BoundaryPolygonSet::FillPolygonFromTrianglesOfLine(const BoundaryLineSet * const line)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   pair<PointSet::iterator, bool> Tester;
   if (line == NULL)
     return false;
-  LOG(1, "Filling polygon from line " << *line);
+  LOG(3, "DEBUG: Filling polygon from line " << *line);
   for (TriangleMap::const_iterator Runner = line->triangles.begin(); Runner != line->triangles.end(); Runner++) {
     for (int i = 0; i < 3; i++) {
       Tester = endpoints.insert((Runner->second)->endpoints[i]);
       if (Tester.second)
-        LOG(1, "  Inserting endpoint " << *((Runner->second)->endpoints[i]));
+        LOG(4, "DEBUG:   Inserting endpoint " << *((Runner->second)->endpoints[i]));
     }
   }
Index: src/Tesselation/BoundaryTriangleSet.cpp
===================================================================
--- src/Tesselation/BoundaryTriangleSet.cpp	(revision 2a3124b519027c588e363ec4c5a44171b4715777)
+++ src/Tesselation/BoundaryTriangleSet.cpp	(revision ce7bfd57176b8ad23e9bfcc393a41c4798df77ed)
@@ -79,8 +79,8 @@
   // set endpoints
   int Counter = 0;
-  LOG(0, "New triangle " << Nr << " with end points: ");
+  LOG(4, "DEBUG: New triangle " << Nr << " with end points: ");
   for (PointMap::iterator runner = OrderMap.begin(); runner != OrderMap.end(); runner++) {
     endpoints[Counter] = runner->second;
-    LOG(0, " " << *endpoints[Counter]);
+    LOG(4, "DEBUG:    " << *endpoints[Counter]);
     Counter++;
   }
@@ -99,8 +99,8 @@
     if (lines[i] != NULL) {
       if (lines[i]->triangles.erase(Nr)) {
-        //LOG(0, "Triangle Nr." << Nr << " erased in line " << *lines[i] << ".");
+        //LOG(5, "DEBUG: Triangle Nr." << Nr << " erased in line " << *lines[i] << ".");
       }
       if (lines[i]->triangles.empty()) {
-        //LOG(0, *lines[i] << " is no more attached to any triangle, erasing.");
+        //LOG(5, "DEBUG: " << *lines[i] << " is no more attached to any triangle, erasing.");
         delete (lines[i]);
         lines[i] = NULL;
@@ -108,5 +108,5 @@
     }
   }
-  //LOG(0, "Erasing triangle Nr." << Nr << " itself.");
+  //LOG(5, "DEBUG: Erasing triangle Nr." << Nr << " itself.");
 }
 ;
@@ -144,5 +144,5 @@
   if (NormalVector.ScalarProduct(OtherVector) > 0.)
     NormalVector.Scale(-1.);
-  LOG(1, "Normal Vector is " << NormalVector << ".");
+  LOG(4, "DEBUG: Normal Vector of " << *this << " is " << NormalVector << ".");
 }
 ;
@@ -171,16 +171,16 @@
     Intersection = Plane(NormalVector, (endpoints[0]->node->getPosition())).GetIntersection(centerLine);
 
-    LOG(1, "INFO: Triangle is " << *this << ".");
-    LOG(1, "INFO: Line is from " << MolCenter << " to " << x << ".");
-    LOG(1, "INFO: Intersection is " << Intersection << ".");
+    LOG(4, "DEBUG: Triangle is " << *this << ".");
+    LOG(4, "DEBUG: Line is from " << MolCenter << " to " << x << ".");
+    LOG(4, "DEBUG: Intersection is " << Intersection << ".");
 
     if (Intersection.DistanceSquared(endpoints[0]->node->getPosition()) < MYEPSILON) {
-      LOG(1, "Intersection coindices with first endpoint.");
+      LOG(4, "DEBUG: Intersection coindices with first endpoint.");
       return true;
     }   else if (Intersection.DistanceSquared(endpoints[1]->node->getPosition()) < MYEPSILON) {
-      LOG(1, "Intersection coindices with second endpoint.");
+      LOG(4, "DEBUG: Intersection coindices with second endpoint.");
       return true;
     }   else if (Intersection.DistanceSquared(endpoints[2]->node->getPosition()) < MYEPSILON) {
-      LOG(1, "Intersection coindices with third endpoint.");
+      LOG(4, "DEBUG: Intersection coindices with third endpoint.");
       return true;
     }
@@ -194,12 +194,12 @@
       CrossPoint -= (endpoints[i%3]->node->getPosition());  // cross point was returned as absolute vector
       const double s = CrossPoint.ScalarProduct(helper)/helper.NormSquared();
-      LOG(1, "INFO: Factor s is " << s << ".");
+      LOG(4, "DEBUG: Factor s is " << s << ".");
       if ((s < -MYEPSILON) || ((s-1.) > MYEPSILON)) {
-        LOG(1, "INFO: Crosspoint " << CrossPoint << "outside of triangle.");
+        LOG(4, "DEBUG: Crosspoint " << CrossPoint << "outside of triangle.");
         return false;
       }
       i++;
     } while (i < 3);
-    LOG(1, "INFO: Crosspoint " << CrossPoint << " inside of triangle.");
+    LOG(4, "DEBUG: Crosspoint " << CrossPoint << " inside of triangle.");
     return true;
   }
@@ -230,7 +230,7 @@
   Vector Direction;
 
-  // 1. get intersection with plane and place in ClosestPoint
-  LOG(1, "INFO: Looking for closest point of triangle " << *this << " to " << x << ".");
-  LOG(1, "INFO: endpoints are " << endpoints[0]->node->getPosition() << ","
+  // 1. get intersection with plane
+  LOG(3, "DEBUG: Looking for closest point of triangle " << *this << " to " << x << ".");
+  LOG(3, "DEBUG: endpoints are " << endpoints[0]->node->getPosition() << ","
       << endpoints[1]->node->getPosition() << ", and " << endpoints[2]->node->getPosition() << ".");
   try {
@@ -241,7 +241,7 @@
   }
   Vector InPlane(ClosestPoint); // points from plane intersection to straight-down point
+  LOG(4, "DEBUG: Closest point on triangle plane is " << ClosestPoint << ".");
 
   // 2. Calculate in plane part of line (x, intersection)
-  LOG(2, "INFO: Closest point on triangle plane is " << ClosestPoint << ".");
 
   // Calculate cross point between one baseline and the desired point such that distance is shortest
@@ -254,12 +254,12 @@
     CrossPoint[i] = l.getClosestPoint(InPlane);
     // NOTE: direction of line is normalized, hence s must not necessarily be in [0,1] for the baseline
-    LOG(2, "INFO: Closest point on line from " << (endpoints[(i+1)%3]->node->getPosition())
+    LOG(4, "DEBUG: Closest point on line from " << (endpoints[(i+1)%3]->node->getPosition())
         << " to " << (endpoints[i%3]->node->getPosition()) << " is " << CrossPoint[i] << ".");
     CrossPoint[i] -= (endpoints[(i+1)%3]->node->getPosition());  // cross point was returned as absolute vector
     const double s = CrossPoint[i].ScalarProduct(Direction)/Direction.NormSquared();
-    LOG(2, "INFO: Factor s is " << s << ".");
+    LOG(5, "DEBUG: Factor s is " << s << ".");
     if ((s >= -MYEPSILON) && ((s-1.) <= MYEPSILON)) {
       CrossPoint[i] += (endpoints[(i+1)%3]->node->getPosition());  // make cross point absolute again
-      LOG(2, "INFO: Crosspoint is " << CrossPoint[i] << ", intersecting BoundaryLine between "
+      LOG(5, "DEBUG: Crosspoint is " << CrossPoint[i] << ", intersecting BoundaryLine between "
           << endpoints[i % 3]->node->getPosition() << " and "
           << endpoints[(i + 1) % 3]->node->getPosition() << ".");
@@ -270,5 +270,5 @@
       else
         CrossPoint[i] = (endpoints[i%3]->node->getPosition());
-      LOG(2, "INFO: Crosspoint is " << CrossPoint[i] << ", intersecting outside of BoundaryLine between "
+      LOG(5, "DEBUG: Crosspoint is " << CrossPoint[i] << ", intersecting outside of BoundaryLine between "
           << endpoints[i % 3]->node->getPosition() << " and "
           << endpoints[(i + 1) % 3]->node->getPosition() << ".");
@@ -297,9 +297,9 @@
     ShortestDistance = InPlane.DistanceSquared(x);
   }
-
-  LOG(1, "INFO: Closest Point is " << ClosestPoint << " with shortest squared distance is " << ShortestDistance << ".");
+  LOG(3, "DEBUG: Closest Point is " << ClosestPoint << " with shortest squared distance is " << ShortestDistance << ".");
+
   return ShortestDistance;
 }
-;
+
 
 /** Checks whether lines is any of the three boundary lines this triangle contains.
@@ -494,5 +494,5 @@
     (center) += (endpoints[i]->node->getPosition());
   center.Scale(1. / 3.);
-  LOG(1, "INFO: Center is at " << center << ".");
+  LOG(4, "DEBUG: Center of BoundaryTriangleSet is at " << center << ".");
 }
 
Index: src/Tesselation/CandidateForTesselation.cpp
===================================================================
--- src/Tesselation/CandidateForTesselation.cpp	(revision 2a3124b519027c588e363ec4c5a44171b4715777)
+++ src/Tesselation/CandidateForTesselation.cpp	(revision ce7bfd57176b8ad23e9bfcc393a41c4798df77ed)
@@ -50,5 +50,5 @@
   OtherShortestAngle(2. * M_PI)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
 }
 ;
@@ -65,5 +65,5 @@
   OtherShortestAngle(2. * M_PI)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
 };
 
@@ -84,5 +84,5 @@
 bool CandidateForTesselation::CheckValidity(const double RADIUS, const LinkedCell_deprecated *LC) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
 
   const double radiusSquared = RADIUS * RADIUS;
@@ -92,7 +92,7 @@
 
   if (!pointlist.empty())
-    LOG(1, "INFO: Checking whether sphere contains candidate list and baseline " << *BaseLine->endpoints[0] << "<->" << *BaseLine->endpoints[1] << " only ...");
+    LOG(3, "DEBUG: Checking whether sphere contains candidate list and baseline " << *BaseLine->endpoints[0] << "<->" << *BaseLine->endpoints[1] << " only ...");
   else
-    LOG(1, "INFO: Checking whether sphere with no candidates contains baseline " << *BaseLine->endpoints[0] << "<->" << *BaseLine->endpoints[1] << " only ...");
+    LOG(3, "DEBUG: Checking whether sphere with no candidates contains baseline " << *BaseLine->endpoints[0] << "<->" << *BaseLine->endpoints[1] << " only ...");
   // check baseline for OptCenter and OtherOptCenter being on sphere's surface
   for (list<const Vector *>::const_iterator VRunner = VectorList.begin(); VRunner != VectorList.end(); ++VRunner) {
@@ -115,10 +115,10 @@
         return false;
       } else {
-        LOG(1, "Candidate " << *Walker << " is inside by " << distance << ".");
+        LOG(3, "DEBUG: Candidate " << *Walker << " is inside by " << distance << ".");
       }
     }
   }
 
-  LOG(1, "INFO: Checking whether sphere contains no others points ...");
+  LOG(2, "DEBUG: Checking whether sphere contains no others points ...");
   bool flag = true;
   for (list<const Vector *>::const_iterator VRunner = VectorList.begin(); VRunner != VectorList.end(); ++VRunner) {
@@ -126,15 +126,17 @@
     TesselPointList *ListofPoints = LC->GetPointsInsideSphere(RADIUS, (*VRunner));
 
-    LOG(1, "The following atoms are inside sphere at " << (*VRunner) << ":");
-    for (TesselPointList::const_iterator Runner = ListofPoints->begin(); Runner != ListofPoints->end(); ++Runner)
-      LOG(1, "  " << *(*Runner) << " with distance " << (*Runner)->distance(*(*VRunner)) << ".");
+    {
+      LOG(3, "DEBUG: The following atoms are inside sphere at " << (*VRunner) << ":");
+      for (TesselPointList::const_iterator Runner = ListofPoints->begin(); Runner != ListofPoints->end(); ++Runner)
+        LOG(3, "DEBUG:  " << *(*Runner) << " with distance " << (*Runner)->distance(*(*VRunner)) << ".");
+    }
 
     // remove baseline's endpoints and candidates
     for (int i = 0; i < 2; i++) {
-      LOG(1, "INFO: removing baseline tesselpoint " << *BaseLine->endpoints[i]->node << ".");
+      LOG(3, "DEBUG: removing baseline tesselpoint " << *BaseLine->endpoints[i]->node << ".");
       ListofPoints->remove(BaseLine->endpoints[i]->node);
     }
     for (TesselPointList::const_iterator Runner = pointlist.begin(); Runner != pointlist.end(); ++Runner) {
-      LOG(1, "INFO: removing candidate tesselpoint " << *(*Runner) << ".");
+      LOG(3, "DEBUG: removing candidate tesselpoint " << *(*Runner) << ".");
       ListofPoints->remove(*Runner);
     }
Index: src/Tesselation/boundary.cpp
===================================================================
--- src/Tesselation/boundary.cpp	(revision 2a3124b519027c588e363ec4c5a44171b4715777)
+++ src/Tesselation/boundary.cpp	(revision ce7bfd57176b8ad23e9bfcc393a41c4798df77ed)
@@ -63,5 +63,5 @@
 double *GetDiametersOfCluster(const Boundaries *BoundaryPtr, const molecule *mol, Tesselation *&TesselStruct, const bool IsAngstroem)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   // get points on boundary of NULL was given as parameter
   bool BoundaryFreeFlag = false;
@@ -163,5 +163,5 @@
 Boundaries *GetBoundaryPoints(const molecule *mol, Tesselation *&TesselStruct)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   PointMap PointsOnBoundary;
   LineMap LinesOnBoundary;
@@ -328,5 +328,5 @@
 void FindConvexBorder(const molecule* mol, Boundaries *BoundaryPts, Tesselation *&TesselStruct, const LinkedCell_deprecated *LCList, const char *filename)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   bool BoundaryFreeFlag = false;
   Boundaries *BoundaryPoints = NULL;
@@ -443,5 +443,5 @@
 bool RemoveAllBoundaryPoints(class Tesselation *&TesselStruct, const molecule * const mol, const char * const filename)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   int i=0;
   char number[MAXSTRINGSIZE];
@@ -500,5 +500,5 @@
 double ConvexizeNonconvexEnvelope(class Tesselation *&TesselStruct, const molecule * const mol, const char * const filename)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   double volume = 0;
   class BoundaryPointSet *point = NULL;
@@ -614,5 +614,5 @@
 void StoreTrianglesinFile(const molecule * const mol, const Tesselation * const TesselStruct, const char *filename, const char *extraSuffix)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   PointCloudAdaptor< molecule > cloud(const_cast<molecule *>(mol), mol->name);
   // 4. Store triangles in tecplot file
@@ -651,5 +651,5 @@
 void PrepareClustersinWater(config *configuration, molecule *mol, double ClusterVolume, double celldensity)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   bool IsAngstroem = true;
   double *GreatestDiameter = NULL;
@@ -759,5 +759,5 @@
 void FillBoxWithMolecule(MoleculeListClass *List, molecule *filler, config &configuration, const double MaxDistance, const double distance[NDIM], const double boundary, const double RandomAtomDisplacement, const double RandomMolDisplacement, const bool DoRandomRotation)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   molecule *Filling = World::getInstance().createMolecule();
   Vector CurrentPosition;
@@ -1056,5 +1056,5 @@
     )
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   molecule *Filling = NULL;
   Vector CurrentPosition;
@@ -1231,5 +1231,5 @@
     const bool DoRandomRotation)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   molecule *Filling = NULL;
   Vector CurrentPosition;
@@ -1424,5 +1424,5 @@
 bool FindNonConvexBorder(molecule* const mol, Tesselation *&TesselStruct, const LinkedCell_deprecated *&LCList, const double RADIUS, const char *filename = NULL)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   bool freeLC = false;
   bool status = false;
@@ -1554,5 +1554,5 @@
 Vector* FindEmbeddingHole(MoleculeListClass *mols, molecule *srcmol)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   Vector *Center = new Vector;
   Center->Zero();
Index: src/Tesselation/ellipsoid.cpp
===================================================================
--- src/Tesselation/ellipsoid.cpp	(revision 2a3124b519027c588e363ec4c5a44171b4715777)
+++ src/Tesselation/ellipsoid.cpp	(revision ce7bfd57176b8ad23e9bfcc393a41c4798df77ed)
@@ -430,5 +430,5 @@
     Center += (Runner->second->node->getPosition());
   Center.Scale(1./T->PointsOnBoundaryCount);
-  LOG(1, "Center is at " << Center << ".");
+  LOG(4, "DEBUG: Center of PointsOnBoundary is at " << Center << ".");
 
   // Output header
Index: src/Tesselation/tesselation.cpp
===================================================================
--- src/Tesselation/tesselation.cpp	(revision 2a3124b519027c588e363ec4c5a44171b4715777)
+++ src/Tesselation/tesselation.cpp	(revision ce7bfd57176b8ad23e9bfcc393a41c4798df77ed)
@@ -68,5 +68,5 @@
   InternalPointer(PointsOnBoundary.begin())
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
 }
 ;
@@ -77,6 +77,6 @@
 Tesselation::~Tesselation()
 {
-  Info FunctionInfo(__func__);
-  LOG(0, "Free'ing TesselStruct ... ");
+  //Info FunctionInfo(__func__);
+  LOG(2, "INFO: Free'ing TesselStruct ... ");
   for (TriangleMap::iterator runner = TrianglesOnBoundary.begin(); runner != TrianglesOnBoundary.end(); runner++) {
     if (runner->second != NULL) {
@@ -86,5 +86,5 @@
       ELOG(1, "The triangle " << runner->first << " has already been free'd.");
   }
-  LOG(0, "This envelope was written to file " << TriangleFilesWritten << " times(s).");
+  LOG(1, "INFO: This envelope was written to file " << TriangleFilesWritten << " times(s).");
 }
 
@@ -198,5 +198,5 @@
 void Tesselation::GuessStartingTriangle()
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   // 4b. create a starting triangle
   // 4b1. create all distances
@@ -331,5 +331,5 @@
 void Tesselation::TesselateOnBoundary(IPointCloud & cloud)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   bool flag;
   PointMap::iterator winner;
@@ -350,9 +350,9 @@
         // get peak point with respect to this base line's only triangle
         BTS = baseline->second->triangles.begin()->second; // there is only one triangle so far
-        LOG(0, "Current baseline is between " << *(baseline->second) << ".");
+        LOG(3, "DEBUG: Current baseline is between " << *(baseline->second) << ".");
         for (int i = 0; i < 3; i++)
           if ((BTS->endpoints[i] != baseline->second->endpoints[0]) && (BTS->endpoints[i] != baseline->second->endpoints[1]))
             peak = BTS->endpoints[i];
-        LOG(1, " and has peak " << *peak << ".");
+        LOG(3, "DEBUG:    and has peak " << *peak << ".");
 
         // prepare some auxiliary vectors
@@ -373,5 +373,5 @@
         BTS->GetNormalVector(NormalVector);
         NormalVector = BTS->NormalVector;
-        LOG(2, "NormalVector of base triangle is " << NormalVector);
+        LOG(4, "DEBUG: NormalVector of base triangle is " << NormalVector);
 
         // vector in propagation direction (out of triangle)
@@ -382,5 +382,5 @@
         if (PropagationVector.ScalarProduct(TempVector) > 0) // make sure normal propagation vector points outward from baseline
           PropagationVector.Scale(-1.);
-        LOG(2, "PropagationVector of base triangle is " << PropagationVector);
+        LOG(4, "DEBUG: PropagationVector of base triangle is " << PropagationVector);
         winner = PointsOnBoundary.end();
 
@@ -388,5 +388,5 @@
         for (PointMap::iterator target = PointsOnBoundary.begin(); target != PointsOnBoundary.end(); target++) {
           if ((target->second != baseline->second->endpoints[0]) && (target->second != baseline->second->endpoints[1])) { // don't take the same endpoints
-            LOG(1, "Target point is " << *(target->second) << ":");
+            LOG(4, "DEBUG: Target point is " << *(target->second) << ":");
 
             // first check direction, so that triangles don't intersect
@@ -394,10 +394,10 @@
             VirtualNormalVector.ProjectOntoPlane(NormalVector);
             TempAngle = VirtualNormalVector.Angle(PropagationVector);
-            LOG(2, "VirtualNormalVector is " << VirtualNormalVector << " and PropagationVector is " << PropagationVector << ".");
+            LOG(5, "DEBUG: VirtualNormalVector is " << VirtualNormalVector << " and PropagationVector is " << PropagationVector << ".");
             if (TempAngle > (M_PI / 2.)) { // no bends bigger than Pi/2 (90 degrees)
-              LOG(2, "Angle on triangle plane between propagation direction and base line to " << *(target->second) << " is " << TempAngle << ", bad direction!");
+              LOG(5, "DEBUG: Angle on triangle plane between propagation direction and base line to " << *(target->second) << " is " << TempAngle << ", bad direction!");
               continue;
             } else
-              LOG(2, "Angle on triangle plane between propagation direction and base line to " << *(target->second) << " is " << TempAngle << ", good direction!");
+              LOG(5, "DEBUG: Angle on triangle plane between propagation direction and base line to " << *(target->second) << " is " << TempAngle << ", good direction!");
 
             // check first and second endpoint (if any connecting line goes to target has at least not more than 1 triangle)
@@ -405,9 +405,9 @@
             LineChecker[1] = baseline->second->endpoints[1]->lines.find(target->first);
             if (((LineChecker[0] != baseline->second->endpoints[0]->lines.end()) && (LineChecker[0]->second->triangles.size() == 2))) {
-              LOG(2, *(baseline->second->endpoints[0]) << " has line " << *(LineChecker[0]->second) << " to " << *(target->second) << " as endpoint with " << LineChecker[0]->second->triangles.size() << " triangles.");
+              LOG(5, "DEBUG: " << *(baseline->second->endpoints[0]) << " has line " << *(LineChecker[0]->second) << " to " << *(target->second) << " as endpoint with " << LineChecker[0]->second->triangles.size() << " triangles.");
               continue;
             }
             if (((LineChecker[1] != baseline->second->endpoints[1]->lines.end()) && (LineChecker[1]->second->triangles.size() == 2))) {
-              LOG(2, *(baseline->second->endpoints[1]) << " has line " << *(LineChecker[1]->second) << " to " << *(target->second) << " as endpoint with " << LineChecker[1]->second->triangles.size() << " triangles.");
+              LOG(5, "DEBUG: " << *(baseline->second->endpoints[1]) << " has line " << *(LineChecker[1]->second) << " to " << *(target->second) << " as endpoint with " << LineChecker[1]->second->triangles.size() << " triangles.");
               continue;
             }
@@ -415,5 +415,5 @@
             // check whether the envisaged triangle does not already exist (if both lines exist and have same endpoint)
             if ((((LineChecker[0] != baseline->second->endpoints[0]->lines.end()) && (LineChecker[1] != baseline->second->endpoints[1]->lines.end()) && (GetCommonEndpoint(LineChecker[0]->second, LineChecker[1]->second) == peak)))) {
-              LOG(4, "Current target is peak!");
+              LOG(6, "DEBUG: Current target is peak!");
               continue;
             }
@@ -442,9 +442,9 @@
             // calculate angle
             TempAngle = NormalVector.Angle(VirtualNormalVector);
-            LOG(2, "NormalVector is " << VirtualNormalVector << " and the angle is " << TempAngle << ".");
+            LOG(5, "DEBUG: NormalVector is " << VirtualNormalVector << " and the angle is " << TempAngle << ".");
             if ((SmallestAngle - TempAngle) > MYEPSILON) { // set to new possible winner
               SmallestAngle = TempAngle;
               winner = target;
-              LOG(2, "New winner " << *winner->second->node << " due to smaller angle between normal vectors.");
+              LOG(5, "DEBUG: New winner " << *winner->second->node << " due to smaller angle between normal vectors.");
             } else if (fabs(SmallestAngle - TempAngle) < MYEPSILON) { // check the angle to propagation, both possible targets are in one plane! (their normals have same angle)
               // hence, check the angles to some normal direction from our base line but in this common plane of both targets...
@@ -461,9 +461,9 @@
                 SmallestAngle = TempAngle;
                 winner = target;
-                LOG(2, "New winner " << *winner->second->node << " due to smaller angle " << TempAngle << " to propagation direction.");
+                LOG(5, "DEBUG: New winner " << *winner->second->node << " due to smaller angle " << TempAngle << " to propagation direction.");
               } else
-                LOG(2, "Keeping old winner " << *winner->second->node << " due to smaller angle to propagation direction.");
+                LOG(5, "DEBUG: Keeping old winner " << *winner->second->node << " due to smaller angle to propagation direction.");
             } else
-              LOG(2, "Keeping old winner " << *winner->second->node << " due to smaller angle between normal vectors.");
+              LOG(5, "DEBUG: Keeping old winner " << *winner->second->node << " due to smaller angle between normal vectors.");
           }
         } // end of loop over all boundary points
@@ -471,5 +471,5 @@
         // 5b. The point of the above whose triangle has the greatest angle with the triangle the current line belongs to (it only belongs to one, remember!): New triangle
         if (winner != PointsOnBoundary.end()) {
-          LOG(0, "Winning target point is " << *(winner->second) << " with angle " << SmallestAngle << ".");
+          LOG(3, "DEBUG: Winning target point is " << *(winner->second) << " with angle " << SmallestAngle << ".");
           // create the lins of not yet present
           BLS[0] = baseline->second;
@@ -506,5 +506,5 @@
         // 5d. If the set of lines is not yet empty, go to 5. and continue
       } else
-        LOG(0, "Baseline candidate " << *(baseline->second) << " has a triangle count of " << baseline->second->triangles.size() << ".");
+        LOG(3, "DEBUG: Baseline candidate " << *(baseline->second) << " has a triangle count of " << baseline->second->triangles.size() << ".");
   } while (flag);
 
@@ -522,5 +522,5 @@
 bool Tesselation::InsertStraddlingPoints(IPointCloud & cloud, const LinkedCell_deprecated *LC)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   Vector Intersection, Normal;
   TesselPoint *Walker = NULL;
@@ -541,5 +541,5 @@
     }
     Walker = cloud.GetPoint();
-    LOG(0, "Current point is " << *Walker << ".");
+    LOG(3, "DEBUG: Current point is " << *Walker << ".");
     // get the next triangle
     triangles = FindClosestTrianglesToVector(Walker->getPosition(), BoundaryPoints);
@@ -550,20 +550,20 @@
     delete triangles;
     if ((BTS == NULL) || (BTS->ContainsBoundaryPoint(Walker))) {
-      LOG(0, "No triangles found, probably a tesselation point itself.");
+      LOG(3, "DEBUG: No triangles found, probably a tesselation point itself.");
       cloud.GoToNext();
       continue;
     } else {
     }
-    LOG(0, "Closest triangle is " << *BTS << ".");
+    LOG(3, "DEBUG: Closest triangle is " << *BTS << ".");
     // get the intersection point
     if (BTS->GetIntersectionInsideTriangle(*Center, Walker->getPosition(), Intersection)) {
-      LOG(0, "We have an intersection at " << Intersection << ".");
+      LOG(3, "DEBUG: We have an intersection at " << Intersection << ".");
       // we have the intersection, check whether in- or outside of boundary
       if ((Center->DistanceSquared(Walker->getPosition()) - Center->DistanceSquared(Intersection)) < -MYEPSILON) {
         // inside, next!
-        LOG(0, *Walker << " is inside wrt triangle " << *BTS << ".");
+        LOG(3, "DEBUG: " << *Walker << " is inside wrt triangle " << *BTS << ".");
       } else {
         // outside!
-        LOG(0, *Walker << " is outside wrt triangle " << *BTS << ".");
+        LOG(3, "DEBUG: " << *Walker << " is outside wrt triangle " << *BTS << ".");
         class BoundaryLineSet *OldLines[3], *NewLines[3];
         class BoundaryPointSet *OldPoints[3], *NewPoint;
@@ -575,5 +575,5 @@
         Normal = BTS->NormalVector;
         // add Walker to boundary points
-        LOG(0, "Adding " << *Walker << " to BoundaryPoints.");
+        LOG(3, "DEBUG: Adding " << *Walker << " to BoundaryPoints.");
         AddFlag = true;
         if (AddBoundaryPoint(Walker, 0))
@@ -582,5 +582,5 @@
           continue;
         // remove triangle
-        LOG(0, "Erasing triangle " << *BTS << ".");
+        LOG(3, "DEBUG: Erasing triangle " << *BTS << ".");
         TrianglesOnBoundary.erase(BTS->Nr);
         delete (BTS);
@@ -590,5 +590,5 @@
           BPS[1] = OldPoints[i];
           NewLines[i] = new class BoundaryLineSet(BPS, LinesOnBoundaryCount);
-          LOG(1, "Creating new line " << *NewLines[i] << ".");
+          LOG(4, "DEBUG: Creating new line " << *NewLines[i] << ".");
           LinesOnBoundary.insert(LinePair(LinesOnBoundaryCount, NewLines[i])); // no need for check for unique insertion as BPS[0] is definitely a new one
           LinesOnBoundaryCount++;
@@ -612,5 +612,5 @@
           BTS->GetNormalVector(Normal);
           Normal.Scale(-1.);
-          LOG(0, "Created new triangle " << *BTS << ".");
+          LOG(3, "DEBUG: Created new triangle " << *BTS << ".");
           TrianglesOnBoundary.insert(TrianglePair(TrianglesOnBoundaryCount, BTS));
           TrianglesOnBoundaryCount++;
@@ -639,5 +639,5 @@
 bool Tesselation::AddBoundaryPoint(TesselPoint * Walker, const int n)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   PointTestPair InsertUnique;
   BPS[n] = new class BoundaryPointSet(Walker);
@@ -661,5 +661,5 @@
 void Tesselation::AddTesselationPoint(TesselPoint* Candidate, const int n)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   PointTestPair InsertUnique;
   TPS[n] = new class BoundaryPointSet(Candidate);
@@ -669,5 +669,5 @@
   } else {
     delete TPS[n];
-    LOG(0, "Node " << *((InsertUnique.first)->second->node) << " is already present in PointsOnBoundary.");
+    LOG(4, "DEBUG: Node " << *((InsertUnique.first)->second->node) << " is already present in PointsOnBoundary.");
     TPS[n] = (InsertUnique.first)->second;
   }
@@ -682,5 +682,5 @@
 void Tesselation::SetTesselationPoint(TesselPoint* Candidate, const int n) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   PointMap::const_iterator FindPoint = PointsOnBoundary.find(Candidate->getNr());
   if (FindPoint != PointsOnBoundary.end())
@@ -706,5 +706,5 @@
   BoundaryLineSet *WinningLine = NULL;
   if (FindLine != a->lines.end()) {
-    LOG(1, "INFO: There is at least one line between " << *a << " and " << *b << ": " << *(FindLine->second) << ".");
+    LOG(3, "DEBUG: There is at least one line between " << *a << " and " << *b << ": " << *(FindLine->second) << ".");
 
     pair<LineMap::iterator, LineMap::iterator> FindPair;
@@ -712,21 +712,21 @@
 
     for (FindLine = FindPair.first; (FindLine != FindPair.second) && (insertNewLine); FindLine++) {
-      LOG(1, "INFO: Checking line " << *(FindLine->second) << " ...");
+      LOG(3, "DEBUG: Checking line " << *(FindLine->second) << " ...");
       // If there is a line with less than two attached triangles, we don't need a new line.
       if (FindLine->second->triangles.size() == 1) {
         CandidateMap::iterator Finder = OpenLines.find(FindLine->second);
         if (!Finder->second->pointlist.empty())
-          LOG(1, "INFO: line " << *(FindLine->second) << " is open with candidate " << **(Finder->second->pointlist.begin()) << ".");
+          LOG(4, "DEBUG: line " << *(FindLine->second) << " is open with candidate " << **(Finder->second->pointlist.begin()) << ".");
         else
-          LOG(1, "INFO: line " << *(FindLine->second) << " is open with no candidate.");
+          LOG(4, "DEBUG: line " << *(FindLine->second) << " is open with no candidate.");
         // get open line
         for (TesselPointList::const_iterator CandidateChecker = Finder->second->pointlist.begin(); CandidateChecker != Finder->second->pointlist.end(); ++CandidateChecker) {
           if ((*(CandidateChecker) == candidate->node) && (OptCenter == NULL || OptCenter->DistanceSquared(Finder->second->OptCenter) < MYEPSILON )) { // stop searching if candidate matches
-            LOG(1, "ACCEPT: Candidate " << *(*CandidateChecker) << " has the right center " << Finder->second->OptCenter << ".");
+            LOG(4, "ACCEPT: Candidate " << *(*CandidateChecker) << " has the right center " << Finder->second->OptCenter << ".");
             insertNewLine = false;
             WinningLine = FindLine->second;
             break;
           } else {
-            LOG(1, "REJECT: Candidate " << *(*CandidateChecker) << "'s center " << Finder->second->OptCenter << " does not match desired on " << *OptCenter << ".");
+            LOG(5, "REJECT: Candidate " << *(*CandidateChecker) << "'s center " << Finder->second->OptCenter << " does not match desired on " << *OptCenter << ".");
           }
         }
@@ -753,6 +753,6 @@
 void Tesselation::AddNewTesselationTriangleLine(class BoundaryPointSet *a, class BoundaryPointSet *b, const int n)
 {
-  Info FunctionInfo(__func__);
-  LOG(0, "Adding open line [" << LinesOnBoundaryCount << "|" << *(a->node) << " and " << *(b->node) << ".");
+  //Info FunctionInfo(__func__);
+  LOG(2, "DEBUG: Adding open line [" << LinesOnBoundaryCount << "|" << *(a->node) << " and " << *(b->node) << ".");
   BPS[0] = a;
   BPS[1] = b;
@@ -775,6 +775,6 @@
 void Tesselation::AddExistingTesselationTriangleLine(class BoundaryLineSet *Line, int n)
 {
-  Info FunctionInfo(__func__);
-  LOG(0, "Using existing line " << *Line);
+  //Info FunctionInfo(__func__);
+  LOG(5, "DEBUG: Using existing line " << *Line);
 
   // set endpoints and line
@@ -785,5 +785,5 @@
   CandidateMap::iterator CandidateLine = OpenLines.find(BLS[n]);
   if (CandidateLine != OpenLines.end()) {
-    LOG(1, " Removing line from OpenLines.");
+    LOG(6, "DEBUG: Removing line from OpenLines.");
     delete (CandidateLine->second);
     OpenLines.erase(CandidateLine);
@@ -799,6 +799,6 @@
 void Tesselation::AddTesselationTriangle()
 {
-  Info FunctionInfo(__func__);
-  LOG(1, "Adding triangle to global TrianglesOnBoundary map.");
+  //Info FunctionInfo(__func__);
+  LOG(4, "DEBUG: Adding triangle to global TrianglesOnBoundary map.");
 
   // add triangle to global map
@@ -819,6 +819,6 @@
 void Tesselation::AddTesselationTriangle(const int nr)
 {
-  Info FunctionInfo(__func__);
-  LOG(0, "Adding triangle to global TrianglesOnBoundary map.");
+  //Info FunctionInfo(__func__);
+  LOG(4, "DEBUG: Adding triangle to global TrianglesOnBoundary map.");
 
   // add triangle to global map
@@ -839,13 +839,13 @@
 void Tesselation::RemoveTesselationTriangle(class BoundaryTriangleSet *triangle)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   if (triangle == NULL)
     return;
   for (int i = 0; i < 3; i++) {
     if (triangle->lines[i] != NULL) {
-      LOG(0, "Removing triangle Nr." << triangle->Nr << " in line " << *triangle->lines[i] << ".");
+      LOG(4, "DEBUG: Removing triangle Nr." << triangle->Nr << " in line " << *triangle->lines[i] << ".");
       triangle->lines[i]->triangles.erase(triangle->Nr);
       std::stringstream output;
-      output << "INFO: " << *triangle->lines[i] << " is ";
+      output << *triangle->lines[i] << " is ";
       if (triangle->lines[i]->triangles.empty()) {
         output << "no more attached to any triangle, erasing.";
@@ -857,5 +857,5 @@
           output << "\t[" << (TriangleRunner->second)->Nr << "|" << *((TriangleRunner->second)->endpoints[0]) << ", " << *((TriangleRunner->second)->endpoints[1]) << ", " << *((TriangleRunner->second)->endpoints[2]) << "] \t";
       }
-      LOG(1, output.str());
+      LOG(3, "DEBUG: " << output.str());
       triangle->lines[i] = NULL; // free'd or not: disconnect
     } else
@@ -864,5 +864,5 @@
 
   if (TrianglesOnBoundary.erase(triangle->Nr))
-    LOG(0, "Removing triangle Nr. " << triangle->Nr << ".");
+    LOG(3, "DEBUG: Removing triangle Nr. " << triangle->Nr << ".");
   delete (triangle);
 }
@@ -875,5 +875,5 @@
 void Tesselation::RemoveTesselationLine(class BoundaryLineSet *line)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   int Numbers[2];
 
@@ -896,5 +896,5 @@
         for (LineMap::iterator Runner = erasor.first; Runner != erasor.second; Runner++)
           if ((*Runner).second == line) {
-            LOG(0, "Removing Line Nr. " << line->Nr << " in boundary point " << *line->endpoints[i] << ".");
+            LOG(4, "DEBUG: Removing Line Nr. " << line->Nr << " in boundary point " << *line->endpoints[i] << ".");
             line->endpoints[i]->lines.erase(Runner);
             break;
@@ -902,19 +902,19 @@
       } else { // there's just a single line left
         if (line->endpoints[i]->lines.erase(line->Nr))
-          LOG(0, "Removing Line Nr. " << line->Nr << " in boundary point " << *line->endpoints[i] << ".");
+          LOG(4, "DEBUG: Removing Line Nr. " << line->Nr << " in boundary point " << *line->endpoints[i] << ".");
       }
       if (line->endpoints[i]->lines.empty()) {
-        LOG(0, *line->endpoints[i] << " has no more lines it's attached to, erasing.");
+        LOG(4, "DEBUG: " << *line->endpoints[i] << " has no more lines it's attached to, erasing.");
         RemoveTesselationPoint(line->endpoints[i]);
       } else if (DoLog(0)) {
         std::stringstream output;
-        output << *line->endpoints[i] << " has still lines it's attached to: ";
+        output << "DEBUG: " << *line->endpoints[i] << " has still lines it's attached to: ";
         for (LineMap::iterator LineRunner = line->endpoints[i]->lines.begin(); LineRunner != line->endpoints[i]->lines.end(); LineRunner++)
           output << "[" << *(LineRunner->second) << "] \t";
-        LOG(0, output.str());
+        LOG(4, output.str());
       }
       line->endpoints[i] = NULL; // free'd or not: disconnect
     } else
-      ELOG(1, "Endpoint " << i << " has already been free'd.");
+      ELOG(4, "DEBUG: Endpoint " << i << " has already been free'd.");
   }
   if (!line->triangles.empty())
@@ -922,5 +922,5 @@
 
   if (LinesOnBoundary.erase(line->Nr))
-    LOG(0, "Removing line Nr. " << line->Nr << ".");
+    LOG(4, "DEBUG: Removing line Nr. " << line->Nr << ".");
   delete (line);
 }
@@ -934,9 +934,9 @@
 void Tesselation::RemoveTesselationPoint(class BoundaryPointSet *point)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   if (point == NULL)
     return;
   if (PointsOnBoundary.erase(point->Nr))
-    LOG(0, "Removing point Nr. " << point->Nr << ".");
+    LOG(4, "DEBUG: Removing point Nr. " << point->Nr << ".");
   delete (point);
 }
@@ -953,16 +953,16 @@
 bool Tesselation::CheckDegeneracy(CandidateForTesselation &CandidateLine, const double RADIUS, const LinkedCell_deprecated *LC) const
 {
-  Info FunctionInfo(__func__);
-
-  LOG(1, "INFO: Checking whether sphere contains no others points ...");
+  //Info FunctionInfo(__func__);
+
+  LOG(3, "DEBUG: Checking whether sphere contains no others points ...");
   bool flag = true;
 
-  LOG(1, "Check by: draw sphere {" << CandidateLine.OtherOptCenter[0] << " " << CandidateLine.OtherOptCenter[1] << " " << CandidateLine.OtherOptCenter[2] << "} radius " << RADIUS << " resolution 30");
+  LOG(3, "DEBUG: Check by: draw sphere {" << CandidateLine.OtherOptCenter[0] << " " << CandidateLine.OtherOptCenter[1] << " " << CandidateLine.OtherOptCenter[2] << "} radius " << RADIUS << " resolution 30");
   // get all points inside the sphere
   TesselPointList *ListofPoints = LC->GetPointsInsideSphere(RADIUS, &CandidateLine.OtherOptCenter);
 
-  LOG(1, "The following atoms are inside sphere at " << CandidateLine.OtherOptCenter << ":");
+  LOG(3, "DEBUG: The following atoms are inside sphere at " << CandidateLine.OtherOptCenter << ":");
   for (TesselPointList::const_iterator Runner = ListofPoints->begin(); Runner != ListofPoints->end(); ++Runner)
-    LOG(1, "  " << *(*Runner) << " with distance " << (*Runner)->distance(CandidateLine.OtherOptCenter) << ".");
+    LOG(3, "DEBUG:   " << *(*Runner) << " with distance " << (*Runner)->distance(CandidateLine.OtherOptCenter) << ".");
 
   // remove triangles's endpoints
@@ -976,9 +976,9 @@
   // check for other points
   if (!ListofPoints->empty()) {
-    LOG(1, "CheckDegeneracy: There are still " << ListofPoints->size() << " points inside the sphere.");
+    LOG(3, "DEBUG: CheckDegeneracy: There are still " << ListofPoints->size() << " points inside the sphere.");
     flag = false;
-    LOG(1, "External atoms inside of sphere at " << CandidateLine.OtherOptCenter << ":");
+    LOG(3, "DEBUG: External atoms inside of sphere at " << CandidateLine.OtherOptCenter << ":");
     for (TesselPointList::const_iterator Runner = ListofPoints->begin(); Runner != ListofPoints->end(); ++Runner)
-      LOG(1, "  " << *(*Runner) << " with distance " << (*Runner)->distance(CandidateLine.OtherOptCenter) << ".");
+      LOG(3, "DEBUG:   " << *(*Runner) << " with distance " << (*Runner)->distance(CandidateLine.OtherOptCenter) << ".");
   }
   delete (ListofPoints);
@@ -999,5 +999,5 @@
 int Tesselation::CheckPresenceOfTriangle(TesselPoint *Candidates[3]) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   int adjacentTriangleCount = 0;
   class BoundaryPointSet *Points[3];
@@ -1021,5 +1021,5 @@
           for (; (FindLine != Points[i]->lines.end()) && (FindLine->first == Points[j]->node->getNr()); FindLine++) {
             TriangleMap *triangles = &FindLine->second->triangles;
-            LOG(1, "Current line is " << FindLine->first << ": " << *(FindLine->second) << " with triangles " << triangles << ".");
+            LOG(5, "DEBUG: Current line is " << FindLine->first << ": " << *(FindLine->second) << " with triangles " << triangles << ".");
             for (TriangleMap::const_iterator FindTriangle = triangles->begin(); FindTriangle != triangles->end(); FindTriangle++) {
               if (FindTriangle->second->IsPresentTupel(Points)) {
@@ -1027,8 +1027,7 @@
               }
             }
-            LOG(1, "end.");
           }
           // Only one of the triangle lines must be considered for the triangle count.
-          //LOG(0, "Found " << adjacentTriangleCount << " adjacent triangles for the point set.");
+          //LOG(5, "DEBUG: Found " << adjacentTriangleCount << " adjacent triangles for the point set.");
           //return adjacentTriangleCount;
         }
@@ -1037,5 +1036,5 @@
   }
 
-  LOG(0, "Found " << adjacentTriangleCount << " adjacent triangles for the point set.");
+  LOG(3, "DEBUG: Found " << adjacentTriangleCount << " adjacent triangles for the point set.");
   return adjacentTriangleCount;
 }
@@ -1052,5 +1051,5 @@
 class BoundaryTriangleSet * Tesselation::GetPresentTriangle(TesselPoint *Candidates[3])
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   class BoundaryTriangleSet *triangle = NULL;
   class BoundaryPointSet *Points[3];
@@ -1082,5 +1081,5 @@
           }
           // Only one of the triangle lines must be considered for the triangle count.
-          //LOG(0, "Found " << adjacentTriangleCount << " adjacent triangles for the point set.");
+          //LOG(5, "DEBUG: Found " << adjacentTriangleCount << " adjacent triangles for the point set.");
           //return adjacentTriangleCount;
         }
@@ -1104,5 +1103,5 @@
 bool Tesselation::FindStartingTriangle(const double RADIUS, const LinkedCell_deprecated *LC)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   int i = 0;
   TesselPoint* MaxPoint[NDIM];
@@ -1136,5 +1135,5 @@
           for (TesselPointSTLList::const_iterator Runner = List->begin(); Runner != List->end(); Runner++) {
             if ((*Runner)->at(map[0]) > maxCoordinate[map[0]]) {
-              LOG(1, "New maximal for axis " << map[0] << " node is " << *(*Runner) << " at " << (*Runner)->getPosition() << ".");
+              LOG(4, "DEBUG: New maximal for axis " << map[0] << " node is " << *(*Runner) << " at " << (*Runner)->getPosition() << ".");
               maxCoordinate[map[0]] = (*Runner)->at(map[0]);
               MaxPoint[map[0]] = (*Runner);
@@ -1152,5 +1151,5 @@
     for (int i = 0; i < NDIM; i++)
       output << i << ": " << *MaxPoint[i] << "\t";
-    LOG(1, output.str());
+    LOG(3, "DEBUG: " << output.str());
   }
 
@@ -1161,5 +1160,5 @@
     BaseLine = new BoundaryLineSet();
     BaseLine->endpoints[0] = new BoundaryPointSet(MaxPoint[k]);
-    LOG(0, "INFO: Coordinates of start node at " << *BaseLine->endpoints[0]->node << ".");
+    LOG(2, "DEBUG: Coordinates of start node at " << *BaseLine->endpoints[0]->node << ".");
 
     double ShortestAngle;
@@ -1206,13 +1205,14 @@
 
     // adding point 1 and point 2 and add the line between them
-    LOG(0, "Coordinates of start node at " << *BaseLine->endpoints[0]->node << ".");
-    LOG(0, "Found second point is at " << *BaseLine->endpoints[1]->node << ".");
+    LOG(2, "DEBUG: Found second point is at " << *BaseLine->endpoints[1]->node << ".");
 
     //LOG(1, "INFO: OldSphereCenter is at " << helper << ".");
     CandidateForTesselation OptCandidates(BaseLine);
     FindThirdPointForTesselation(NormalVector, SearchDirection, SphereCenter, OptCandidates, NULL, RADIUS, LC);
-    LOG(0, "List of third Points is:");
-    for (TesselPointList::iterator it = OptCandidates.pointlist.begin(); it != OptCandidates.pointlist.end(); it++) {
-      LOG(0, " " << *(*it));
+    {
+      std::stringstream output;
+      for (TesselPointList::iterator it = OptCandidates.pointlist.begin(); it != OptCandidates.pointlist.end(); it++)
+        output << *(*it);
+      LOG(2, "DEBUG: List of third Points is: " << output.str());
     }
     if (!OptCandidates.pointlist.empty()) {
@@ -1248,5 +1248,5 @@
 //bool Tesselation::HasOtherBaselineBetterCandidate(CandidateForTesselation &CandidateLine, const TesselPoint * const ThirdNode, double RADIUS, const LinkedCell_deprecated * const LC) const
 //{
-//	Info FunctionInfo(__func__);
+//	//Info FunctionInfo(__func__);
 //  bool result = false;
 //  Vector CircleCenter;
@@ -1387,5 +1387,5 @@
 bool Tesselation::FindNextSuitableTriangle(CandidateForTesselation &CandidateLine, const BoundaryTriangleSet &T, const double& RADIUS, const LinkedCell_deprecated *LC)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   Vector CircleCenter;
   Vector CirclePlaneNormal;
@@ -1402,5 +1402,5 @@
       break;
     }
-  LOG(0, "Current baseline is " << *CandidateLine.BaseLine << " with ThirdPoint " << *ThirdPoint << " of triangle " << T << ".");
+  LOG(3, "DEBUG: Current baseline is " << *CandidateLine.BaseLine << " with ThirdPoint " << *ThirdPoint << " of triangle " << T << ".");
 
   CandidateLine.T = &T;
@@ -1422,7 +1422,7 @@
     CircleRadius = RADIUS * RADIUS - radius / 4.;
     CirclePlaneNormal.Normalize();
-    LOG(1, "INFO: CircleCenter is at " << CircleCenter << ", CirclePlaneNormal is " << CirclePlaneNormal << " with circle radius " << sqrt(CircleRadius) << ".");
-
-    LOG(1, "INFO: OldSphereCenter is at " << T.SphereCenter << ".");
+    LOG(3, "DEBUG: CircleCenter is at " << CircleCenter << ", CirclePlaneNormal is " << CirclePlaneNormal << " with circle radius " << sqrt(CircleRadius) << ".");
+
+    LOG(3, "DEBUG: OldSphereCenter is at " << T.SphereCenter << ".");
 
     // construct SearchDirection and an "outward pointer"
@@ -1431,8 +1431,8 @@
     if (helper.ScalarProduct(SearchDirection) < -HULLEPSILON)// ohoh, SearchDirection points inwards!
       SearchDirection.Scale(-1.);
-    LOG(1, "INFO: SearchDirection is " << SearchDirection << ".");
+    LOG(3, "DEBUG: SearchDirection is " << SearchDirection << ".");
     if (fabs(RelativeSphereCenter.ScalarProduct(SearchDirection)) > HULLEPSILON) {
       // rotated the wrong way!
-      ELOG(1, "SearchDirection and RelativeOldSphereCenter are still not orthogonal!");
+      ELOG(3, "DEBUG: SearchDirection and RelativeOldSphereCenter are still not orthogonal!");
     }
 
@@ -1441,14 +1441,16 @@
 
   } else {
-    LOG(0, "Circumcircle for base line " << *CandidateLine.BaseLine << " and base triangle " << T << " is too big!");
+    LOG(3, "DEBUG: Circumcircle for base line " << *CandidateLine.BaseLine << " and base triangle " << T << " is too big!");
   }
 
   if (CandidateLine.pointlist.empty()) {
-    ELOG(2, "Could not find a suitable candidate.");
+    ELOG(4, "DEBUG: Could not find a suitable candidate.");
     return false;
   }
-  LOG(0, "Third Points are: ");
-  for (TesselPointList::iterator it = CandidateLine.pointlist.begin(); it != CandidateLine.pointlist.end(); ++it) {
-    LOG(0, " " << *(*it));
+  {
+    std::stringstream output;
+    for (TesselPointList::iterator it = CandidateLine.pointlist.begin(); it != CandidateLine.pointlist.end(); ++it)
+      output << " " << *(*it);
+    LOG(3, "DEBUG: Third Points are: " << output.str());
   }
 
@@ -1474,5 +1476,5 @@
       ASSERT((baseline->BaseLine->triangles.size() == 1),"Open line without exactly one attached triangle");
       T = (((baseline->BaseLine->triangles.begin()))->second);
-      LOG(1, "Finding best candidate for open line " << *baseline->BaseLine << " of triangle " << *T);
+      LOG(4, "DEBUG: Finding best candidate for open line " << *baseline->BaseLine << " of triangle " << *T);
       TesselationFailFlag = TesselationFailFlag && FindNextSuitableTriangle(*baseline, *T, RADIUS, LCList); //the line is there, so there is a triangle, but only one.
     }
@@ -1491,5 +1493,5 @@
 void Tesselation::AddCandidatePolygon(CandidateForTesselation CandidateLine, const double RADIUS, const LinkedCell_deprecated *LC)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   Vector Center;
   TesselPoint * const TurningPoint = CandidateLine.BaseLine->endpoints[0]->node;
@@ -1505,7 +1507,10 @@
   TesselPointList *connectedClosestPoints = GetCircleOfSetOfPoints(&SetOfNeighbours, TurningPoint, CandidateLine.BaseLine->endpoints[1]->node->getPosition());
 
-  LOG(0, "List of Candidates for Turning Point " << *TurningPoint << ":");
-  for (TesselPointList::iterator TesselRunner = connectedClosestPoints->begin(); TesselRunner != connectedClosestPoints->end(); ++TesselRunner)
-    LOG(0, " " << **TesselRunner);
+  {
+    std::stringstream output;
+    for (TesselPointList::iterator TesselRunner = connectedClosestPoints->begin(); TesselRunner != connectedClosestPoints->end(); ++TesselRunner)
+      output << **TesselRunner;
+    LOG(3, "DEBUG: List of Candidates for Turning Point " << *TurningPoint << ":");
+  }
 
   // go through all angle-sorted candidates (in degenerate n-nodes case we may have to add multiple triangles)
@@ -1514,5 +1519,5 @@
   Sprinter++;
   while (Sprinter != connectedClosestPoints->end()) {
-    LOG(0, "Current Runner is " << *(*Runner) << " and sprinter is " << *(*Sprinter) << ".");
+    LOG(3, "DEBUG: Current Runner is " << *(*Runner) << " and sprinter is " << *(*Sprinter) << ".");
 
     AddTesselationPoint(TurningPoint, 0);
@@ -1527,5 +1532,5 @@
       // fill the internal open lines with its respective candidate (otherwise lines in degenerate case are not picked)
       FindDegeneratedCandidatesforOpenLines(*Sprinter, &CandidateLine.OptCenter); // Assume BTS contains last triangle
-      LOG(0, " There are still more triangles to add.");
+      LOG(2, "DEBUG:  There are still more triangles to add.");
     }
     // pick candidates for other open lines as well
@@ -1535,5 +1540,5 @@
     if (CheckDegeneracy(CandidateLine, RADIUS, LC)) {
       // add normal and degenerate triangles
-      LOG(1, "Triangle of endpoints " << *TPS[0] << "," << *TPS[1] << " and " << *TPS[2] << " is degenerated, adding both sides.");
+      LOG(3, "DEBUG: Triangle of endpoints " << *TPS[0] << "," << *TPS[1] << " and " << *TPS[2] << " is degenerated, adding both sides.");
       AddCandidateTriangle(CandidateLine, OtherOpt);
 
@@ -1555,16 +1560,16 @@
 void Tesselation::FindDegeneratedCandidatesforOpenLines(TesselPoint * const Sprinter, const Vector * const OptCenter)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
 
   pair<LineMap::iterator, LineMap::iterator> FindPair = TPS[0]->lines.equal_range(TPS[2]->node->getNr());
   for (LineMap::const_iterator FindLine = FindPair.first; FindLine != FindPair.second; FindLine++) {
-    LOG(1, "INFO: Checking line " << *(FindLine->second) << " ...");
+    LOG(4, "DEBUG: Checking line " << *(FindLine->second) << " ...");
     // If there is a line with less than two attached triangles, we don't need a new line.
     if (FindLine->second->triangles.size() == 1) {
       CandidateMap::iterator Finder = OpenLines.find(FindLine->second);
       if (!Finder->second->pointlist.empty())
-        LOG(1, "INFO: line " << *(FindLine->second) << " is open with candidate " << **(Finder->second->pointlist.begin()) << ".");
+        LOG(4, "DEBUG: line " << *(FindLine->second) << " is open with candidate " << **(Finder->second->pointlist.begin()) << ".");
       else {
-        LOG(1, "INFO: line " << *(FindLine->second) << " is open with no candidate, setting to next Sprinter" << (*Sprinter));
+        LOG(4, "DEBUG: line " << *(FindLine->second) << " is open with no candidate, setting to next Sprinter" << (*Sprinter));
         Finder->second->T = BTS;  // is last triangle
         Finder->second->pointlist.push_back(Sprinter);
@@ -1585,5 +1590,5 @@
 void Tesselation::AddDegeneratedTriangle(CandidateForTesselation &CandidateLine, const double RADIUS, const LinkedCell_deprecated *LC)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   Vector Center;
   CandidateMap::const_iterator CandidateCheck = OpenLines.end();
@@ -1591,13 +1596,13 @@
 
   /// 1. Create or pick the lines for the first triangle
-  LOG(0, "INFO: Creating/Picking lines for first triangle ...");
+  LOG(3, "DEBUG: Creating/Picking lines for first triangle ...");
   for (int i = 0; i < 3; i++) {
     BLS[i] = NULL;
-    LOG(0, "Current line is between " << *TPS[(i + 0) % 3] << " and " << *TPS[(i + 1) % 3] << ":");
+    LOG(3, "DEBUG: Current line is between " << *TPS[(i + 0) % 3] << " and " << *TPS[(i + 1) % 3] << ":");
     AddTesselationLine(&CandidateLine.OptCenter, TPS[(i + 2) % 3], TPS[(i + 0) % 3], TPS[(i + 1) % 3], i);
   }
 
   /// 2. create the first triangle and NormalVector and so on
-  LOG(0, "INFO: Adding first triangle with center at " << CandidateLine.OptCenter << " ...");
+  LOG(3, "DEBUG: Adding first triangle with center at " << CandidateLine.OptCenter << " ...");
   BTS = new class BoundaryTriangleSet(BLS, TrianglesOnBoundaryCount);
   AddTesselationTriangle();
@@ -1610,13 +1615,13 @@
   // give some verbose output about the whole procedure
   if (CandidateLine.T != NULL)
-    LOG(0, "--> New triangle with " << *BTS << " and normal vector " << BTS->NormalVector << ", from " << *CandidateLine.T << " and angle " << CandidateLine.ShortestAngle << ".");
+    LOG(2, "DEBUG: --> New triangle with " << *BTS << " and normal vector " << BTS->NormalVector << ", from " << *CandidateLine.T << " and angle " << CandidateLine.ShortestAngle << ".");
   else
-    LOG(0, "--> New starting triangle with " << *BTS << " and normal vector " << BTS->NormalVector << " and no top triangle.");
+    LOG(2, "DEBUG: --> New starting triangle with " << *BTS << " and normal vector " << BTS->NormalVector << " and no top triangle.");
   triangle = BTS;
 
   /// 3. Gather candidates for each new line
-  LOG(0, "INFO: Adding candidates to new lines ...");
+  LOG(3, "DEBUG: Adding candidates to new lines ...");
   for (int i = 0; i < 3; i++) {
-    LOG(0, "Current line is between " << *TPS[(i + 0) % 3] << " and " << *TPS[(i + 1) % 3] << ":");
+    LOG(4, "DEBUG: Current line is between " << *TPS[(i + 0) % 3] << " and " << *TPS[(i + 1) % 3] << ":");
     CandidateCheck = OpenLines.find(BLS[i]);
     if ((CandidateCheck != OpenLines.end()) && (CandidateCheck->second->pointlist.empty())) {
@@ -1628,12 +1633,12 @@
 
   /// 4. Create or pick the lines for the second triangle
-  LOG(0, "INFO: Creating/Picking lines for second triangle ...");
+  LOG(3, "DEBUG: Creating/Picking lines for second triangle ...");
   for (int i = 0; i < 3; i++) {
-    LOG(0, "Current line is between " << *TPS[(i + 0) % 3] << " and " << *TPS[(i + 1) % 3] << ":");
+    LOG(4, "DEBUG: Current line is between " << *TPS[(i + 0) % 3] << " and " << *TPS[(i + 1) % 3] << ":");
     AddTesselationLine(&CandidateLine.OtherOptCenter, TPS[(i + 2) % 3], TPS[(i + 0) % 3], TPS[(i + 1) % 3], i);
   }
 
   /// 5. create the second triangle and NormalVector and so on
-  LOG(0, "INFO: Adding second triangle with center at " << CandidateLine.OtherOptCenter << " ...");
+  LOG(3, "DEBUG: Adding second triangle with center at " << CandidateLine.OtherOptCenter << " ...");
   BTS = new class BoundaryTriangleSet(BLS, TrianglesOnBoundaryCount);
   AddTesselationTriangle();
@@ -1645,12 +1650,12 @@
   // give some verbose output about the whole procedure
   if (CandidateLine.T != NULL)
-    LOG(0, "--> New degenerate triangle with " << *BTS << " and normal vector " << BTS->NormalVector << ", from " << *CandidateLine.T << " and angle " << CandidateLine.ShortestAngle << ".");
+    LOG(2, "DEBUG: --> New degenerate triangle with " << *BTS << " and normal vector " << BTS->NormalVector << ", from " << *CandidateLine.T << " and angle " << CandidateLine.ShortestAngle << ".");
   else
-    LOG(0, "--> New degenerate starting triangle with " << *BTS << " and normal vector " << BTS->NormalVector << " and no top triangle.");
+    LOG(2, "DEBUG: --> New degenerate starting triangle with " << *BTS << " and normal vector " << BTS->NormalVector << " and no top triangle.");
 
   /// 6. Adding triangle to new lines
-  LOG(0, "INFO: Adding second triangles to new lines ...");
+  LOG(3, "DEBUG: Adding second triangles to new lines ...");
   for (int i = 0; i < 3; i++) {
-    LOG(0, "Current line is between " << *TPS[(i + 0) % 3] << " and " << *TPS[(i + 1) % 3] << ":");
+    LOG(4, "DEBUG: Current line is between " << *TPS[(i + 0) % 3] << " and " << *TPS[(i + 1) % 3] << ":");
     CandidateCheck = OpenLines.find(BLS[i]);
     if ((CandidateCheck != OpenLines.end()) && (CandidateCheck->second->pointlist.empty())) {
@@ -1669,5 +1674,5 @@
 void Tesselation::AddCandidateTriangle(CandidateForTesselation &CandidateLine, enum centers type)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   Vector Center;
   Vector *OptCenter = (type == Opt) ? &CandidateLine.OptCenter : &CandidateLine.OtherOptCenter;
@@ -1690,7 +1695,7 @@
   // give some verbose output about the whole procedure
   if (CandidateLine.T != NULL)
-    LOG(0, "--> New" << ((type == OtherOpt) ? " degenerate " : " ") << "triangle with " << *BTS << " and normal vector " << BTS->NormalVector << ", from " << *CandidateLine.T << " and angle " << CandidateLine.ShortestAngle << ".");
+    LOG(2, "INFO: --> New" << ((type == OtherOpt) ? " degenerate " : " ") << "triangle with " << *BTS << " and normal vector " << BTS->NormalVector << ", from " << *CandidateLine.T << " and angle " << CandidateLine.ShortestAngle << ".");
   else
-    LOG(0, "--> New" << ((type == OtherOpt) ? " degenerate " : " ") << "starting triangle with " << *BTS << " and normal vector " << BTS->NormalVector << " and no top triangle.");
+    LOG(2, "INFO: --> New" << ((type == OtherOpt) ? " degenerate " : " ") << "starting triangle with " << *BTS << " and normal vector " << BTS->NormalVector << " and no top triangle.");
 }
 ;
@@ -1705,5 +1710,5 @@
 class BoundaryPointSet *Tesselation::IsConvexRectangle(class BoundaryLineSet *Base)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   class BoundaryPointSet *Spot = NULL;
   class BoundaryLineSet *OtherBase;
@@ -1717,6 +1722,6 @@
   OtherBase = new class BoundaryLineSet(BPS, -1);
 
-  LOG(1, "INFO: Current base line is " << *Base << ".");
-  LOG(1, "INFO: Other base line is " << *OtherBase << ".");
+  LOG(3, "DEBUG: Current base line is " << *Base << ".");
+  LOG(3, "DEBUG: Other base line is " << *OtherBase << ".");
 
   // get the closest point on each line to the other line
@@ -1736,5 +1741,5 @@
   delete (ClosestPoint);
   if ((distance[0] * distance[1]) > 0) { // have same sign?
-    LOG(1, "REJECT: Both SKPs have same sign: " << distance[0] << " and " << distance[1] << ". " << *Base << "' rectangle is concave.");
+    LOG(4, "REJECT: Both SKPs have same sign: " << distance[0] << " and " << distance[1] << ". " << *Base << "' rectangle is concave.");
     if (distance[0] < distance[1]) {
       Spot = Base->endpoints[0];
@@ -1744,5 +1749,5 @@
     return Spot;
   } else { // different sign, i.e. we are in between
-    LOG(0, "ACCEPT: Rectangle of triangles of base line " << *Base << " is convex.");
+    LOG(3, "ACCEPT: Rectangle of triangles of base line " << *Base << " is convex.");
     return NULL;
   }
@@ -1753,9 +1758,10 @@
 void Tesselation::PrintAllBoundaryPoints(ofstream *out) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   // print all lines
-  LOG(0, "Printing all boundary points for debugging:");
+  std::stringstream output;
   for (PointMap::const_iterator PointRunner = PointsOnBoundary.begin(); PointRunner != PointsOnBoundary.end(); PointRunner++)
-    LOG(0, *(PointRunner->second));
+    output << " " << *(PointRunner->second);
+  LOG(3, "DEBUG: Printing all boundary points for debugging:" << output.str());
 }
 ;
@@ -1763,9 +1769,10 @@
 void Tesselation::PrintAllBoundaryLines(ofstream *out) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   // print all lines
-  LOG(0, "Printing all boundary lines for debugging:");
+  std::stringstream output;
   for (LineMap::const_iterator LineRunner = LinesOnBoundary.begin(); LineRunner != LinesOnBoundary.end(); LineRunner++)
-    LOG(0, *(LineRunner->second));
+    output << " " << *(LineRunner->second);
+  LOG(3, "DEBUG: Printing all boundary lines for debugging:" << output.str());
 }
 ;
@@ -1773,9 +1780,10 @@
 void Tesselation::PrintAllBoundaryTriangles(ofstream *out) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   // print all triangles
-  LOG(0, "Printing all boundary triangles for debugging:");
+  std::stringstream output;
   for (TriangleMap::const_iterator TriangleRunner = TrianglesOnBoundary.begin(); TriangleRunner != TrianglesOnBoundary.end(); TriangleRunner++)
-    LOG(0, *(TriangleRunner->second));
+    output << " " << *(TriangleRunner->second);
+  LOG(3, "DEBUG: Printing all boundary triangles for debugging:" << output.str());
 }
 ;
@@ -1788,5 +1796,5 @@
 double Tesselation::PickFarthestofTwoBaselines(class BoundaryLineSet *Base)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   class BoundaryLineSet *OtherBase;
   Vector *ClosestPoint[2];
@@ -1800,6 +1808,6 @@
   OtherBase = new class BoundaryLineSet(BPS, -1);
 
-  LOG(0, "INFO: Current base line is " << *Base << ".");
-  LOG(0, "INFO: Other base line is " << *OtherBase << ".");
+  LOG(3, "DEBUG: Current base line is " << *Base << ".");
+  LOG(3, "DEBUG: Other base line is " << *OtherBase << ".");
 
   // get the closest point on each line to the other line
@@ -1819,5 +1827,5 @@
 
   if (Distance.NormSquared() < MYEPSILON) { // check for intersection
-    LOG(0, "REJECT: Both lines have an intersection: Nothing to do.");
+    LOG(3, "REJECT: Both lines have an intersection: Nothing to do.");
     return false;
   } else { // check for sign against BaseLineNormal
@@ -1829,5 +1837,5 @@
     }
     for (TriangleMap::iterator runner = Base->triangles.begin(); runner != Base->triangles.end(); runner++) {
-    LOG(1, "INFO: Adding NormalVector " << runner->second->NormalVector << " of triangle " << *(runner->second) << ".");
+    LOG(4, "DEBUG: Adding NormalVector " << runner->second->NormalVector << " of triangle " << *(runner->second) << ".");
       BaseLineNormal += (runner->second->NormalVector);
     }
@@ -1835,9 +1843,9 @@
 
     if (Distance.ScalarProduct(BaseLineNormal) > MYEPSILON) { // Distance points outwards, hence OtherBase higher than Base -> flip
-      LOG(0, "ACCEPT: Other base line would be higher: Flipping baseline.");
+      LOG(3, "ACCEPT: Other base line would be higher: Flipping baseline.");
       // calculate volume summand as a general tetraeder
       return volume;
     } else { // Base higher than OtherBase -> do nothing
-      LOG(0, "REJECT: Base line is higher: Nothing to do.");
+      LOG(3, "REJECT: Base line is higher: Nothing to do.");
       return 0.;
     }
@@ -1855,5 +1863,5 @@
 class BoundaryLineSet * Tesselation::FlipBaseline(class BoundaryLineSet *Base)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   class BoundaryLineSet *OldLines[4], *NewLine;
   class BoundaryPointSet *OldPoints[2];
@@ -1884,21 +1892,19 @@
 
   // print OldLines and OldPoints for debugging
-  if (DoLog(0)) {
+  if (DoLog(3)) {
     std::stringstream output;
-    output << "The four old lines are: ";
     for (TriangleMap::iterator runner = Base->triangles.begin(); runner != Base->triangles.end(); runner++)
       for (int j = 0; j < 3; j++) // all of their endpoints and baselines
         if (runner->second->lines[j] != Base) // pick not the central baseline
           output << *runner->second->lines[j] << "\t";
-    LOG(0, output.str());
-  }
-  if (DoLog(0)) {
+    LOG(3, "DEBUG: The four old lines are: " << output.str());
+  }
+  if (DoLog(3)) {
     std::stringstream output;
-    output << "The two old points are: ";
     for (TriangleMap::iterator runner = Base->triangles.begin(); runner != Base->triangles.end(); runner++)
       for (int j = 0; j < 3; j++) // all of their endpoints and baselines
         if (!Base->ContainsBoundaryPoint(runner->second->endpoints[j])) // and neither of its endpoints
           output << *runner->second->endpoints[j] << "\t";
-    LOG(0, output.str());
+    LOG(3, "DEBUG: The two old points are: " << output.str());
   }
 
@@ -1930,5 +1936,5 @@
 
   // remove triangles and baseline removes itself
-  LOG(0, "INFO: Deleting baseline " << *Base << " from global list.");
+  LOG(3, "DEBUG: Deleting baseline " << *Base << " from global list.");
   OldBaseLineNr = Base->Nr;
   m = 0;
@@ -1939,5 +1945,5 @@
   // .. then delete each triangle (which deletes the line as well)
   for (list <BoundaryTriangleSet *>::iterator runner = TrianglesOfBase.begin(); !TrianglesOfBase.empty(); runner = TrianglesOfBase.begin()) {
-    LOG(0, "INFO: Deleting triangle " << *(*runner) << ".");
+    LOG(3, "DEBUG: Deleting triangle " << *(*runner) << ".");
     OldTriangleNrs[m++] = (*runner)->Nr;
     RemoveTesselationTriangle((*runner));
@@ -1950,5 +1956,5 @@
   NewLine = new class BoundaryLineSet(BPS, OldBaseLineNr);
   LinesOnBoundary.insert(LinePair(OldBaseLineNr, NewLine)); // no need for check for unique insertion as NewLine is definitely a new one
-  LOG(0, "INFO: Created new baseline " << *NewLine << ".");
+  LOG(3, "DEBUG: Created new baseline " << *NewLine << ".");
 
   // construct new triangles with flipped baseline
@@ -1965,5 +1971,5 @@
     BTS->GetNormalVector(BaseLineNormal);
     AddTesselationTriangle(OldTriangleNrs[0]);
-    LOG(0, "INFO: Created new triangle " << *BTS << ".");
+    LOG(3, "DEBUG: Created new triangle " << *BTS << ".");
 
     BLS[0] = (i == 2 ? OldLines[3] : OldLines[2]);
@@ -1973,5 +1979,5 @@
     BTS->GetNormalVector(BaseLineNormal);
     AddTesselationTriangle(OldTriangleNrs[1]);
-    LOG(0, "INFO: Created new triangle " << *BTS << ".");
+    LOG(3, "DEBUG: Created new triangle " << *BTS << ".");
   } else {
     ELOG(0, "The four old lines do not connect, something's utterly wrong here!");
@@ -1993,5 +1999,5 @@
 void Tesselation::FindSecondPointForTesselation(TesselPoint* a, Vector Oben, TesselPoint*& OptCandidate, double Storage[3], double RADIUS, const LinkedCell_deprecated *LC)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   Vector AngleCheck;
   class TesselPoint* Candidate = NULL;
@@ -2014,5 +2020,5 @@
     Nupper[i] = ((N[i] + 1) < LC->N[i]) ? N[i] + 1 : LC->N[i] - 1;
   }
-  LOG(0, "LC Intervals from [" << N[0] << "<->" << LC->N[0] << ", " << N[1] << "<->" << LC->N[1] << ", " << N[2] << "<->" << LC->N[2] << "] :" << " [" << Nlower[0] << "," << Nupper[0] << "], " << " [" << Nlower[1] << "," << Nupper[1] << "], " << " [" << Nlower[2] << "," << Nupper[2] << "], ");
+  LOG(3, "DEBUG: LC Intervals from [" << N[0] << "<->" << LC->N[0] << ", " << N[1] << "<->" << LC->N[1] << ", " << N[2] << "<->" << LC->N[2] << "] :" << " [" << Nlower[0] << "," << Nupper[0] << "], " << " [" << Nlower[1] << "," << Nupper[1] << "], " << " [" << Nlower[2] << "," << Nupper[2] << "], ");
 
   for (LC->n[0] = Nlower[0]; LC->n[0] <= Nupper[0]; LC->n[0]++)
@@ -2048,20 +2054,20 @@
                 if (angle < Storage[0]) {
                   //LOG(1, "INFO: Old values of Storage is " << Storage[0] << ", " << Storage[1]);
-                  LOG(1, "INFO: Current candidate is " << *Candidate << ": Is a better candidate with distance " << norm << " and angle " << angle << " to oben " << Oben << ".");
+                  LOG(4, "DEBUG: Current candidate is " << *Candidate << ": Is a better candidate with distance " << norm << " and angle " << angle << " to oben " << Oben << ".");
                   OptCandidate = Candidate;
                   Storage[0] = angle;
-                  //LOG(1, "INFO: Changing something in  Storage is " << Storage[0] << ", " << Storage[1]);
+                  //LOG(4, "DEBUG: Changing something in  Storage is " << Storage[0] << ", " << Storage[1]);
                 } else {
-                  //LOG(1, "INFO: Current candidate is " << *Candidate << ": Looses with angle " << angle << " to a better candidate " << *OptCandidate);
+                  //LOG(4, "DEBUG: Current candidate is " << *Candidate << ": Looses with angle " << angle << " to a better candidate " << *OptCandidate);
                 }
               } else {
-                //LOG(1, "INFO: Current candidate is " << *Candidate << ": Refused due to Radius " << norm);
+                //LOG(4, "DEBUG: Current candidate is " << *Candidate << ": Refused due to Radius " << norm);
               }
             } else {
-              //LOG(1, "INFO: Current candidate is " << *Candidate << ": Candidate is equal to first endpoint." << *a << ".");
+              //LOG(4, "DEBUG: Current candidate is " << *Candidate << ": Candidate is equal to first endpoint." << *a << ".");
             }
           }
         } else {
-          LOG(0, "Linked cell list is empty.");
+          LOG(4, "DEBUG: Linked cell list is empty.");
         }
       }
@@ -2101,5 +2107,5 @@
 void Tesselation::FindThirdPointForTesselation(const Vector &NormalVector, const Vector &SearchDirection, const Vector &OldSphereCenter, CandidateForTesselation &CandidateLine, const class BoundaryPointSet * const ThirdPoint, const double RADIUS, const LinkedCell_deprecated *LC) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   Vector CircleCenter; // center of the circle, i.e. of the band of sphere's centers
   Vector CirclePlaneNormal; // normal vector defining the plane this circle lives in
@@ -2118,5 +2124,5 @@
   TesselPoint *Candidate = NULL;
 
-  LOG(1, "INFO: NormalVector of BaseTriangle is " << NormalVector << ".");
+  LOG(3, "DEBUG: NormalVector of BaseTriangle is " << NormalVector << ".");
 
   // copy old center
@@ -2140,5 +2146,5 @@
     CircleRadius = RADIUS * RADIUS - radius;
     CirclePlaneNormal.Normalize();
-    LOG(1, "INFO: CircleCenter is at " << CircleCenter << ", CirclePlaneNormal is " << CirclePlaneNormal << " with circle radius " << sqrt(CircleRadius) << ".");
+    LOG(3, "DEBUG: CircleCenter is at " << CircleCenter << ", CirclePlaneNormal is " << CirclePlaneNormal << " with circle radius " << sqrt(CircleRadius) << ".");
 
     // test whether old center is on the band's plane
@@ -2149,8 +2155,8 @@
     radius = RelativeOldSphereCenter.NormSquared();
     if (fabs(radius - CircleRadius) < HULLEPSILON) {
-      LOG(1, "INFO: RelativeOldSphereCenter is at " << RelativeOldSphereCenter << ".");
+      LOG(3, "DEBUG: RelativeOldSphereCenter is at " << RelativeOldSphereCenter << ".");
 
       // check SearchDirection
-      LOG(1, "INFO: SearchDirection is " << SearchDirection << ".");
+      LOG(3, "DEBUG: SearchDirection is " << SearchDirection << ".");
       if (fabs(RelativeOldSphereCenter.ScalarProduct(SearchDirection)) > HULLEPSILON) { // rotated the wrong way!
         ELOG(1, "SearchDirection and RelativeOldSphereCenter are not orthogonal!");
@@ -2167,5 +2173,5 @@
       }
       // then go through the current and all neighbouring cells and check the contained points for possible candidates
-//      if (DoLog(0)) {
+//      if (DoLog(3)) {
 //        std::stringstream output;
 //        output << "LC Intervals:";
@@ -2188,10 +2194,10 @@
 
                 // check for three unique points
-                LOG(2, "INFO: Current Candidate is " << *Candidate << " for BaseLine " << *CandidateLine.BaseLine << " with OldSphereCenter " << OldSphereCenter << ".");
+                LOG(4, "DEBUG: Current Candidate is " << *Candidate << " for BaseLine " << *CandidateLine.BaseLine << " with OldSphereCenter " << OldSphereCenter << ".");
                 if ((Candidate != CandidateLine.BaseLine->endpoints[0]->node) && (Candidate != CandidateLine.BaseLine->endpoints[1]->node)) {
 
                   // find center on the plane
                   GetCenterofCircumcircle(NewPlaneCenter, CandidateLine.BaseLine->endpoints[0]->node->getPosition(), CandidateLine.BaseLine->endpoints[1]->node->getPosition(), Candidate->getPosition());
-                  LOG(1, "INFO: NewPlaneCenter is " << NewPlaneCenter << ".");
+                  LOG(3, "DEBUG: NewPlaneCenter is " << NewPlaneCenter << ".");
 
                   try {
@@ -2199,9 +2205,9 @@
                                             (CandidateLine.BaseLine->endpoints[1]->node->getPosition()),
                                             (Candidate->getPosition())).getNormal();
-                    LOG(1, "INFO: NewNormalVector is " << NewNormalVector << ".");
+                    LOG(3, "DEBUG: NewNormalVector is " << NewNormalVector << ".");
                     radius = CandidateLine.BaseLine->endpoints[0]->node->DistanceSquared(NewPlaneCenter);
-                    LOG(1, "INFO: CircleCenter is at " << CircleCenter << ", CirclePlaneNormal is " << CirclePlaneNormal << " with circle radius " << sqrt(CircleRadius) << ".");
-                    LOG(1, "INFO: SearchDirection is " << SearchDirection << ".");
-                    LOG(1, "INFO: Radius of CircumCenterCircle is " << radius << ".");
+                    LOG(3, "DEBUG: CircleCenter is at " << CircleCenter << ", CirclePlaneNormal is " << CirclePlaneNormal << " with circle radius " << sqrt(CircleRadius) << ".");
+                    LOG(3, "DEBUG: SearchDirection is " << SearchDirection << ".");
+                    LOG(3, "DEBUG: Radius of CircumCenterCircle is " << radius << ".");
                     if (radius < RADIUS * RADIUS) {
                       otherradius = CandidateLine.BaseLine->endpoints[1]->node->DistanceSquared(NewPlaneCenter);
@@ -2212,11 +2218,11 @@
                         helper = NewNormalVector;
                         helper.Scale(sqrt(RADIUS * RADIUS - radius));
-                        LOG(2, "INFO: Distance of NewPlaneCenter " << NewPlaneCenter << " to either NewSphereCenter is " << helper.Norm() << " of vector " << helper << " with sphere radius " << RADIUS << ".");
+                        LOG(4, "DEBUG: Distance of NewPlaneCenter " << NewPlaneCenter << " to either NewSphereCenter is " << helper.Norm() << " of vector " << helper << " with sphere radius " << RADIUS << ".");
                         NewSphereCenter += helper;
-                        LOG(2, "INFO: NewSphereCenter is at " << NewSphereCenter << ".");
+                        LOG(4, "DEBUG: NewSphereCenter is at " << NewSphereCenter << ".");
                         // OtherNewSphereCenter is created by the same vector just in the other direction
                         helper.Scale(-1.);
                         OtherNewSphereCenter += helper;
-                        LOG(2, "INFO: OtherNewSphereCenter is at " << OtherNewSphereCenter << ".");
+                        LOG(4, "DEBUG: OtherNewSphereCenter is at " << OtherNewSphereCenter << ".");
                         alpha = GetPathLengthonCircumCircle(CircleCenter, CirclePlaneNormal, CircleRadius, NewSphereCenter, OldSphereCenter, NormalVector, SearchDirection, HULLEPSILON);
                         Otheralpha = GetPathLengthonCircumCircle(CircleCenter, CirclePlaneNormal, CircleRadius, OtherNewSphereCenter, OldSphereCenter, NormalVector, SearchDirection, HULLEPSILON);
@@ -2239,18 +2245,18 @@
                           if ((CandidateLine.ShortestAngle - HULLEPSILON) < alpha) {
                             CandidateLine.pointlist.push_back(Candidate);
-                            LOG(0, "ACCEPT: We have found an equally good candidate: " << *(Candidate) << " with " << alpha << " and circumsphere's center at " << CandidateLine.OptCenter << ".");
+                            LOG(2, "ACCEPT: We have found an equally good candidate: " << *(Candidate) << " with " << alpha << " and circumsphere's center at " << CandidateLine.OptCenter << ".");
                           } else {
                             // remove all candidates from the list and then the list itself
                             CandidateLine.pointlist.clear();
                             CandidateLine.pointlist.push_back(Candidate);
-                            LOG(0, "ACCEPT: We have found a better candidate: " << *(Candidate) << " with " << alpha << " and circumsphere's center at " << CandidateLine.OptCenter << ".");
+                            LOG(2, "ACCEPT: We have found a better candidate: " << *(Candidate) << " with " << alpha << " and circumsphere's center at " << CandidateLine.OptCenter << ".");
                           }
                           CandidateLine.ShortestAngle = alpha;
-                          LOG(0, "INFO: There are " << CandidateLine.pointlist.size() << " candidates in the list now.");
+                          LOG(2, "DEBUG: There are " << CandidateLine.pointlist.size() << " candidates in the list now.");
                         } else {
                           if ((Candidate != NULL) && (CandidateLine.pointlist.begin() != CandidateLine.pointlist.end())) {
-                            LOG(1, "REJECT: Old candidate " << *(*CandidateLine.pointlist.begin()) << " with " << CandidateLine.ShortestAngle << " is better than new one " << *Candidate << " with " << alpha << " .");
+                            LOG(3, "REJECT: Old candidate " << *(*CandidateLine.pointlist.begin()) << " with " << CandidateLine.ShortestAngle << " is better than new one " << *Candidate << " with " << alpha << " .");
                           } else {
-                            LOG(1, "REJECT: Candidate " << *Candidate << " with " << alpha << " was rejected.");
+                            LOG(3, "REJECT: Candidate " << *Candidate << " with " << alpha << " was rejected.");
                           }
                         }
@@ -2259,16 +2265,16 @@
                       }
                     } else {
-                      LOG(1, "REJECT: NewSphereCenter " << NewSphereCenter << " for " << *Candidate << " is too far away: " << radius << ".");
+                      LOG(3, "REJECT: NewSphereCenter " << NewSphereCenter << " for " << *Candidate << " is too far away: " << radius << ".");
                     }
                   }
                   catch (LinearDependenceException &excp){
-                    LOG(1, boost::diagnostic_information(excp));
-                    LOG(1, "REJECT: Three points from " << *CandidateLine.BaseLine << " and Candidate " << *Candidate << " are linear-dependent.");
+                    LOG(3, boost::diagnostic_information(excp));
+                    LOG(3, "REJECT: Three points from " << *CandidateLine.BaseLine << " and Candidate " << *Candidate << " are linear-dependent.");
                   }
                 } else {
                   if (ThirdPoint != NULL) {
-                    LOG(1, "REJECT: Base triangle " << *CandidateLine.BaseLine << " and " << *ThirdPoint << " contains Candidate " << *Candidate << ".");
+                    LOG(3, "REJECT: Base triangle " << *CandidateLine.BaseLine << " and " << *ThirdPoint << " contains Candidate " << *Candidate << ".");
                   } else {
-                    LOG(1, "REJECT: Base triangle " << *CandidateLine.BaseLine << " contains Candidate " << *Candidate << ".");
+                    LOG(3, "REJECT: Base triangle " << *CandidateLine.BaseLine << " contains Candidate " << *Candidate << ".");
                   }
                 }
@@ -2281,10 +2287,10 @@
   } else {
     if (ThirdPoint != NULL)
-      LOG(1, "Circumcircle for base line " << *CandidateLine.BaseLine << " and third node " << *ThirdPoint << " is too big!");
+      LOG(3, "Circumcircle for base line " << *CandidateLine.BaseLine << " and third node " << *ThirdPoint << " is too big!");
     else
-      LOG(1, "Circumcircle for base line " << *CandidateLine.BaseLine << " is too big!");
-  }
-
-  LOG(1, "INFO: Sorting candidate list ...");
+      LOG(3, "Circumcircle for base line " << *CandidateLine.BaseLine << " is too big!");
+  }
+
+  LOG(2, "DEBUG: Sorting candidate list ...");
   if (CandidateLine.pointlist.size() > 1) {
     CandidateLine.pointlist.unique();
@@ -2306,5 +2312,5 @@
 class BoundaryPointSet *Tesselation::GetCommonEndpoint(const BoundaryLineSet * line1, const BoundaryLineSet * line2) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   const BoundaryLineSet * lines[2] = { line1, line2 };
   class BoundaryPointSet *node = NULL;
@@ -2334,5 +2340,5 @@
 DistanceToPointMap * Tesselation::FindClosestBoundaryPointsToVector(const Vector &x, const LinkedCell_deprecated* LC) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   PointMap::const_iterator FindPoint;
   int N[NDIM], Nlower[NDIM], Nupper[NDIM];
@@ -2347,5 +2353,5 @@
   for (int i = 0; i < NDIM; i++) // store indices of this cell
     N[i] = LC->n[i];
-  LOG(1, "INFO: Center cell is " << N[0] << ", " << N[1] << ", " << N[2] << " with No. " << LC->index << ".");
+  LOG(2, "DEBUG: Center cell is " << N[0] << ", " << N[1] << ", " << N[2] << " with No. " << LC->index << ".");
   DistanceToPointMap * points = new DistanceToPointMap;
   LC->GetNeighbourBounds(Nlower, Nupper);
@@ -2360,5 +2366,5 @@
             if (FindPoint != PointsOnBoundary.end()) {
               points->insert(DistanceToPointPair(FindPoint->second->node->DistanceSquared(x), FindPoint->second));
-              LOG(1, "INFO: Putting " << *FindPoint->second << " into the list.");
+              LOG(3, "DEBUG: Putting " << *FindPoint->second << " into the list.");
             }
           }
@@ -2385,5 +2391,5 @@
 BoundaryLineSet * Tesselation::FindClosestBoundaryLineToVector(const Vector &x, const LinkedCell_deprecated* LC) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   // get closest points
   DistanceToPointMap * points = FindClosestBoundaryPointsToVector(x, LC);
@@ -2431,5 +2437,5 @@
   // check whether closest line is "too close" :), then it's inside
   if (ClosestLine == NULL) {
-    LOG(0, "Is the only point, no one else is closeby.");
+    LOG(2, "DEBUG: Is the only point, no one else is closeby.");
     return NULL;
   }
@@ -2445,5 +2451,5 @@
 TriangleList * Tesselation::FindClosestTrianglesToVector(const Vector &x, const LinkedCell_deprecated* LC) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   // get closest points
   DistanceToPointMap * points = FindClosestBoundaryPointsToVector(x, LC);
@@ -2511,5 +2517,5 @@
   // check whether closest line is "too close" :), then it's inside
   if (ClosestLines.empty()) {
-    LOG(0, "Is the only point, no one else is closeby.");
+    LOG(2, "DEBUG: Is the only point, no one else is closeby.");
     return NULL;
   }
@@ -2532,5 +2538,5 @@
 class BoundaryTriangleSet * Tesselation::FindClosestTriangleToVector(const Vector &x, const LinkedCell_deprecated* LC) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   class BoundaryTriangleSet *result = NULL;
   TriangleList *triangles = FindClosestTrianglesToVector(x, LC);
@@ -2595,5 +2601,5 @@
 double Tesselation::GetDistanceSquaredToTriangle(const Vector &Point, const BoundaryTriangleSet* const triangle) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   Vector Center;
   Vector helper;
@@ -2652,5 +2658,5 @@
 double Tesselation::GetDistanceToSurface(const Vector &Point, const LinkedCell_deprecated* const LC) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   TriangleIntersectionList Intersections(Point, this, LC);
 
@@ -2667,5 +2673,5 @@
 BoundaryTriangleSet * Tesselation::GetClosestTriangleOnSurface(const Vector &Point, const LinkedCell_deprecated* const LC) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   TriangleIntersectionList Intersections(Point, this, LC);
 
@@ -2682,5 +2688,5 @@
 TesselPointSet * Tesselation::GetAllConnectedPoints(const TesselPoint* const Point) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   TesselPointSet *connectedPoints = new TesselPointSet;
   class BoundaryPointSet *ReferencePoint = NULL;
@@ -2747,5 +2753,5 @@
 TesselPointList * Tesselation::GetCircleOfConnectedTriangles(TesselPointSet *SetOfNeighbours, const TesselPoint* const Point, const Vector &Reference) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   map<double, TesselPoint*> anglesOfPoints;
   TesselPointList *connectedCircle = new TesselPointList;
@@ -2773,5 +2779,5 @@
   }
   PlaneNormal.Scale(1.0 / triangles->size());
-  LOG(1, "INFO: Calculated PlaneNormal of all circle points is " << PlaneNormal << ".");
+  LOG(4, "DEBUG: Calculated PlaneNormal of all circle points is " << PlaneNormal << ".");
   PlaneNormal.Normalize();
 
@@ -2780,5 +2786,5 @@
   AngleZero.ProjectOntoPlane(PlaneNormal);
   if ((AngleZero.NormSquared() < MYEPSILON)) {
-    LOG(1, "Using alternatively " << (*SetOfNeighbours->begin())->getPosition() << " as angle 0 referencer.");
+    LOG(4, "DEBUG: Using alternatively " << (*SetOfNeighbours->begin())->getPosition() << " as angle 0 referencer.");
     AngleZero = ((*SetOfNeighbours->begin())->getPosition()) - (Point->getPosition());
     AngleZero.ProjectOntoPlane(PlaneNormal);
@@ -2788,10 +2794,10 @@
     }
   }
-  LOG(1, "INFO: Reference vector on this plane representing angle 0 is " << AngleZero << ".");
+  LOG(4, "DEBUG: Reference vector on this plane representing angle 0 is " << AngleZero << ".");
   if (AngleZero.NormSquared() > MYEPSILON)
     OrthogonalVector = Plane(PlaneNormal, AngleZero,0).getNormal();
   else
     OrthogonalVector.MakeNormalTo(PlaneNormal);
-  LOG(1, "INFO: OrthogonalVector on plane is " << OrthogonalVector << ".");
+  LOG(4, "DEBUG: OrthogonalVector on plane is " << OrthogonalVector << ".");
 
   // go through all connected points and calculate angle
@@ -2800,5 +2806,5 @@
     helper.ProjectOntoPlane(PlaneNormal);
     double angle = GetAngle(helper, AngleZero, OrthogonalVector);
-    LOG(0, "INFO: Calculated angle is " << angle << " for point " << **listRunner << ".");
+    LOG(4, "DEBUG" << angle << " for point " << **listRunner << ".");
     anglesOfPoints.insert(pair<double, TesselPoint*> (angle, (*listRunner)));
   }
@@ -2824,5 +2830,5 @@
 TesselPointList * Tesselation::GetCircleOfSetOfPoints(TesselPointSet *SetOfNeighbours, const TesselPoint* const Point, const Vector &Reference) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   map<double, TesselPoint*> anglesOfPoints;
   TesselPointList *connectedCircle = new TesselPointList;
@@ -2859,5 +2865,5 @@
                    ((*TesselB)->getPosition()),
                    ((*TesselC)->getPosition())).getNormal();
-    LOG(0, "Making normal vector out of " << *(*TesselA) << ", " << *(*TesselB) << " and " << *(*TesselC) << ":" << helper);
+    LOG(5, "DEBUG: Making normal vector out of " << *(*TesselA) << ", " << *(*TesselB) << " and " << *(*TesselC) << ":" << helper);
     counter++;
     TesselA++;
@@ -2874,5 +2880,5 @@
   //  PlaneNormal.SubtractVector(&center);
   //  PlaneNormal.Normalize();
-  LOG(1, "INFO: Calculated plane normal of circle is " << PlaneNormal << ".");
+  LOG(4, "DEBUG: Calculated plane normal of circle is " << PlaneNormal << ".");
 
   // construct one orthogonal vector
@@ -2882,5 +2888,5 @@
   }
   if ((Reference.IsZero()) || (AngleZero.NormSquared() < MYEPSILON )) {
-    LOG(1, "Using alternatively " << (*SetOfNeighbours->begin())->getPosition() << " as angle 0 referencer.");
+    LOG(4, "DEBUG: Using alternatively " << (*SetOfNeighbours->begin())->getPosition() << " as angle 0 referencer.");
     AngleZero = ((*SetOfNeighbours->begin())->getPosition()) - (Point->getPosition());
     AngleZero.ProjectOntoPlane(PlaneNormal);
@@ -2890,10 +2896,10 @@
     }
   }
-  LOG(1, "INFO: Reference vector on this plane representing angle 0 is " << AngleZero << ".");
+  LOG(4, "DEBUG: Reference vector on this plane representing angle 0 is " << AngleZero << ".");
   if (AngleZero.NormSquared() > MYEPSILON)
     OrthogonalVector = Plane(PlaneNormal, AngleZero,0).getNormal();
   else
     OrthogonalVector.MakeNormalTo(PlaneNormal);
-  LOG(1, "INFO: OrthogonalVector on plane is " << OrthogonalVector << ".");
+  LOG(4, "DEBUG: OrthogonalVector on plane is " << OrthogonalVector << ".");
 
   // go through all connected points and calculate angle
@@ -2905,5 +2911,5 @@
     if (angle > M_PI) // the correction is of no use here (and not desired)
       angle = 2. * M_PI - angle;
-    LOG(0, "INFO: Calculated angle between " << helper << " and " << AngleZero << " is " << angle << " for point " << **listRunner << ".");
+    LOG(4, "DEBUG: Calculated angle between " << helper << " and " << AngleZero << " is " << angle << " for point " << **listRunner << ".");
     InserterTest = anglesOfPoints.insert(pair<double, TesselPoint*> (angle, (*listRunner)));
     if (!InserterTest.second) {
@@ -2928,5 +2934,5 @@
 ListOfTesselPointList * Tesselation::GetPathsOfConnectedPoints(const TesselPoint* const Point) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   map<double, TesselPoint*> anglesOfPoints;
   list<TesselPointList *> *ListOfPaths = new list<TesselPointList *> ;
@@ -3043,5 +3049,5 @@
 ListOfTesselPointList * Tesselation::GetClosedPathsOfConnectedPoints(const TesselPoint* const Point) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   list<TesselPointList *> *ListofPaths = GetPathsOfConnectedPoints(Point);
   list<TesselPointList *> *ListofClosedPaths = new list<TesselPointList *> ;
@@ -3107,5 +3113,5 @@
 TriangleSet *Tesselation::GetAllTriangles(const BoundaryPointSet * const Point) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   TriangleSet *connectedTriangles = new TriangleSet;
 
@@ -3147,5 +3153,5 @@
     return 0.;
   } else
-    LOG(0, "Removing point " << *point << " from tesselated boundary ...");
+    LOG(4, "DEBUG: Removing point " << *point << " from tesselated boundary ...");
 
   // copy old location for the volume
@@ -3328,5 +3334,5 @@
       delete (connectedPath);
     }
-    LOG(0, count << " triangles were created.");
+    LOG(1, "INFO: " << count << " triangles were created.");
   } else {
     while (!ListOfClosedPaths->empty()) {
@@ -3336,9 +3342,9 @@
       delete (connectedPath);
     }
-    LOG(0, "No need to create any triangles.");
+    LOG(3, "DEBUG: No need to create any triangles.");
   }
   delete (ListOfClosedPaths);
 
-  LOG(0, "Removed volume is " << volume << ".");
+  LOG(1, "INFO: Removed volume is " << volume << ".");
 
   return volume;
@@ -3356,5 +3362,5 @@
 TriangleList *Tesselation::FindTriangles(const TesselPoint* const Points[3]) const
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   TriangleList *result = new TriangleList;
   LineMap::const_iterator FindLine;
@@ -3484,5 +3490,5 @@
 IndexToIndex * Tesselation::FindAllDegeneratedLines()
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   UniqueLines AllLines;
   IndexToIndex * DegeneratedLines = new IndexToIndex;
@@ -3505,5 +3511,5 @@
   AllLines.clear();
 
-  LOG(0, "FindAllDegeneratedLines() found " << DegeneratedLines->size() << " lines.");
+  LOG(2, "DEBUG: FindAllDegeneratedLines() found " << DegeneratedLines->size() << " lines.");
   IndexToIndex::iterator it;
   for (it = DegeneratedLines->begin(); it != DegeneratedLines->end(); it++) {
@@ -3511,5 +3517,5 @@
     const LineMap::const_iterator Line2 = LinesOnBoundary.find((*it).second);
     if (Line1 != LinesOnBoundary.end() && Line2 != LinesOnBoundary.end())
-      LOG(0, *Line1->second << " => " << *Line2->second);
+      LOG(3, "DEBUG: " << *Line1->second << " => " << *Line2->second);
     else
       ELOG(1, "Either " << (*it).first << " or " << (*it).second << " are not in LinesOnBoundary!");
@@ -3527,5 +3533,5 @@
 IndexToIndex * Tesselation::FindAllDegeneratedTriangles()
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   IndexToIndex * DegeneratedLines = FindAllDegeneratedLines();
   IndexToIndex * DegeneratedTriangles = new IndexToIndex;
@@ -3553,7 +3559,7 @@
   delete (DegeneratedLines);
 
-  LOG(0, "FindAllDegeneratedTriangles() found " << DegeneratedTriangles->size() << " triangles:");
+  LOG(3, "DEBUG: FindAllDegeneratedTriangles() found " << DegeneratedTriangles->size() << " triangles:");
   for (IndexToIndex::iterator it = DegeneratedTriangles->begin(); it != DegeneratedTriangles->end(); it++)
-    LOG(0, (*it).first << " => " << (*it).second);
+    LOG(3, "DEBUG:    " << (*it).first << " => " << (*it).second);
 
   return DegeneratedTriangles;
@@ -3566,5 +3572,5 @@
 void Tesselation::RemoveDegeneratedTriangles()
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   IndexToIndex * DegeneratedTriangles = FindAllDegeneratedTriangles();
   TriangleMap::iterator finder;
@@ -3574,5 +3580,5 @@
   // iterate over all degenerated triangles
   for (IndexToIndex::iterator TriangleKeyRunner = DegeneratedTriangles->begin(); !DegeneratedTriangles->empty(); TriangleKeyRunner = DegeneratedTriangles->begin()) {
-    LOG(0, "Checking presence of triangles " << TriangleKeyRunner->first << " and " << TriangleKeyRunner->second << ".");
+    LOG(3, "DEBUG: Checking presence of triangles " << TriangleKeyRunner->first << " and " << TriangleKeyRunner->second << ".");
     // both ways are stored in the map, only use one
     if (TriangleKeyRunner->first > TriangleKeyRunner->second)
@@ -3631,11 +3637,11 @@
       // erase the pair
       count += (int) DegeneratedTriangles->erase(triangle->Nr);
-      LOG(0, "RemoveDegeneratedTriangles() removes triangle " << *triangle << ".");
+      LOG(4, "DEBUG: RemoveDegeneratedTriangles() removes triangle " << *triangle << ".");
       RemoveTesselationTriangle(triangle);
       count += (int) DegeneratedTriangles->erase(partnerTriangle->Nr);
-      LOG(0, "RemoveDegeneratedTriangles() removes triangle " << *partnerTriangle << ".");
+      LOG(4, "DEBUG: RemoveDegeneratedTriangles() removes triangle " << *partnerTriangle << ".");
       RemoveTesselationTriangle(partnerTriangle);
     } else {
-      LOG(0, "RemoveDegeneratedTriangles() does not remove triangle " << *triangle << " and its partner " << *partnerTriangle << " because it is essential for at" << " least one of the endpoints to be kept in the tesselation structure.");
+      LOG(4, "DEBUG: RemoveDegeneratedTriangles() does not remove triangle " << *triangle << " and its partner " << *partnerTriangle << " because it is essential for at" << " least one of the endpoints to be kept in the tesselation structure.");
     }
   }
@@ -3644,5 +3650,5 @@
     LastTriangle = NULL;
 
-  LOG(0, "RemoveDegeneratedTriangles() removed " << count << " triangles:");
+  LOG(2, "INFO: RemoveDegeneratedTriangles() removed " << count << " triangles:");
 }
 
@@ -3657,5 +3663,5 @@
 void Tesselation::AddBoundaryPointByDegeneratedTriangle(class TesselPoint *point, LinkedCell_deprecated *LC)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   // find nearest boundary point
   class TesselPoint *BackupPoint = NULL;
@@ -3673,5 +3679,5 @@
     return;
   }
-  LOG(0, "Nearest point on boundary is " << NearestPoint->getName() << ".");
+  LOG(3, "DEBUG: Nearest point on boundary is " << NearestPoint->getName() << ".");
 
   // go through its lines and find the best one to split
@@ -3755,5 +3761,5 @@
 void Tesselation::Output(const char *filename, IPointCloud & cloud)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   ofstream *tempstream = NULL;
   string NameofTempFile;
@@ -3829,5 +3835,5 @@
 int Tesselation::CorrectAllDegeneratedPolygons()
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   /// 2. Go through all BoundaryPointSet's, check their triangles' NormalVector
   IndexToIndex *DegeneratedTriangles = FindAllDegeneratedTriangles();
@@ -3836,8 +3842,8 @@
   pair<map<int, Vector *>::iterator, bool> TriangleInsertionTester;
   for (PointMap::const_iterator Runner = PointsOnBoundary.begin(); Runner != PointsOnBoundary.end(); Runner++) {
-    LOG(0, "Current point is " << *Runner->second << ".");
+    LOG(3, "DEBUG: Current point is " << *Runner->second << ".");
     map<int, Vector *> TriangleVectors;
     // gather all NormalVectors
-    LOG(1, "Gathering triangles ...");
+    LOG(4, "DEBUG: Gathering triangles ...");
     for (LineMap::const_iterator LineRunner = (Runner->second)->lines.begin(); LineRunner != (Runner->second)->lines.end(); LineRunner++)
       for (TriangleMap::const_iterator TriangleRunner = (LineRunner->second)->triangles.begin(); TriangleRunner != (LineRunner->second)->triangles.end(); TriangleRunner++) {
@@ -3845,20 +3851,20 @@
           TriangleInsertionTester = TriangleVectors.insert(pair<int, Vector *> ((TriangleRunner->second)->Nr, &((TriangleRunner->second)->NormalVector)));
           if (TriangleInsertionTester.second)
-            LOG(1, " Adding triangle " << *(TriangleRunner->second) << " to triangles to check-list.");
+            LOG(5, "DEBUG:  Adding triangle " << *(TriangleRunner->second) << " to triangles to check-list.");
         } else {
-          LOG(1, " NOT adding triangle " << *(TriangleRunner->second) << " as it's a simply degenerated one.");
+          LOG(5, "DEBUG:  NOT adding triangle " << *(TriangleRunner->second) << " as it's a simply degenerated one.");
         }
       }
     // check whether there are two that are parallel
-    LOG(1, "Finding two parallel triangles ...");
+    LOG(3, "DEBUG: Finding two parallel triangles ...");
     for (map<int, Vector *>::iterator VectorWalker = TriangleVectors.begin(); VectorWalker != TriangleVectors.end(); VectorWalker++)
       for (map<int, Vector *>::iterator VectorRunner = VectorWalker; VectorRunner != TriangleVectors.end(); VectorRunner++)
         if (VectorWalker != VectorRunner) { // skip equals
           const double SCP = VectorWalker->second->ScalarProduct(*VectorRunner->second); // ScalarProduct should result in -1. for degenerated triangles
-          LOG(1, "Checking " << *VectorWalker->second << " against " << *VectorRunner->second << ": " << SCP);
+          LOG(4, "DEBUG: Checking " << *VectorWalker->second << " against " << *VectorRunner->second << ": " << SCP);
           if (fabs(SCP + 1.) < ParallelEpsilon) {
             InsertionTester = EndpointCandidateList.insert((Runner->second));
             if (InsertionTester.second)
-              LOG(0, " Adding " << *Runner->second << " to endpoint candidate list.");
+              LOG(4, "DEBUG:  Adding " << *Runner->second << " to endpoint candidate list.");
             // and break out of both loops
             VectorWalker = TriangleVectors.end();
@@ -3879,5 +3885,5 @@
     Walker = *(EndpointCandidateList.begin());
     if (Current == NULL) { // create a new polygon with current candidate
-      LOG(0, "Starting new polygon set at point " << *Walker);
+      LOG(3, "DEBUG: Starting new polygon set at point " << *Walker);
       Current = new BoundaryPolygonSet;
       Current->endpoints.insert(Walker);
@@ -3892,18 +3898,18 @@
       for (LineMap::const_iterator LineWalker = Walker->lines.begin(); LineWalker != Walker->lines.end(); LineWalker++) {
         OtherWalker = (LineWalker->second)->GetOtherEndpoint(Walker);
-        LOG(1, "Checking " << *OtherWalker);
+        LOG(4, "DEBUG: Checking " << *OtherWalker);
         set<BoundaryPointSet *>::iterator Finder = EndpointCandidateList.find(OtherWalker);
         if (Finder != EndpointCandidateList.end()) { // found a connected partner
-          LOG(1, " Adding to polygon.");
+          LOG(5, "DEBUG:  Adding to polygon.");
           Current->endpoints.insert(OtherWalker);
           EndpointCandidateList.erase(Finder); // remove from candidates
           ToCheckConnecteds.push(OtherWalker); // but check its partners too
         } else {
-          LOG(1, " is not connected to " << *Walker);
+          LOG(5, "DEBUG:  is not connected to " << *Walker);
         }
       }
     }
 
-    LOG(0, "Final polygon is " << *Current);
+    LOG(3, "DEBUG: Final polygon is " << *Current);
     ListofDegeneratedPolygons.insert(Current);
     Current = NULL;
@@ -3917,5 +3923,5 @@
     for (UniquePolygonSet::iterator PolygonRunner = ListofDegeneratedPolygons.begin(); PolygonRunner != ListofDegeneratedPolygons.end(); PolygonRunner++)
       output << " " << **PolygonRunner;
-    LOG(0, output.str());
+    LOG(3, "DEBUG: " << output.str());
   }
 
@@ -3929,5 +3935,5 @@
     // check whether number is bigger than 2, otherwise it's just a simply degenerated one and nothing to do.
     if (T->size() == 2) {
-      LOG(1, " Skipping degenerated polygon, is just a (already simply degenerated) triangle.");
+      LOG(4, "DEBUG:  Skipping degenerated polygon, is just a (already simply degenerated) triangle.");
       delete (T);
       continue;
@@ -3945,5 +3951,5 @@
     /// 4a. Get NormalVector for one side (this is "front")
     NormalVector = (*TriangleWalker)->NormalVector;
-    LOG(1, "\"front\" defining triangle is " << **TriangleWalker << " and Normal vector of \"front\" side is " << NormalVector);
+    LOG(4, "DEBUG: \"front\" defining triangle is " << **TriangleWalker << " and Normal vector of \"front\" side is " << NormalVector);
     TriangleWalker++;
     TriangleSet::iterator TriangleSprinter = TriangleWalker; // is the inner advanced iterator
@@ -3954,17 +3960,17 @@
       triangle = *TriangleWalker;
       TriangleSprinter++;
-      LOG(1, "Current triangle to test for removal: " << *triangle);
+      LOG(4, "DEBUG: Current triangle to test for removal: " << *triangle);
       if (triangle->NormalVector.ScalarProduct(NormalVector) < 0) { // if from other side, then delete and remove from list
-        LOG(1, " Removing ... ");
+        LOG(5, "DEBUG:  Removing ... ");
         TriangleNrs.push(triangle->Nr);
         T->erase(TriangleWalker);
         RemoveTesselationTriangle(triangle);
       } else
-        LOG(1, " Keeping ... ");
+        LOG(5, "DEBUG:  Keeping ... ");
     }
     /// 4c. Copy all "front" triangles but with inverse NormalVector
     TriangleWalker = T->begin();
     while (TriangleWalker != T->end()) { // go through all front triangles
-      LOG(1, " Re-creating triangle " << **TriangleWalker << " with NormalVector " << (*TriangleWalker)->NormalVector);
+      LOG(4, "DEBUG:  Re-creating triangle " << **TriangleWalker << " with NormalVector " << (*TriangleWalker)->NormalVector);
       for (int i = 0; i < 3; i++)
         AddTesselationPoint((*TriangleWalker)->endpoints[i]->node, i);
@@ -3986,8 +3992,8 @@
   }
   IndexToIndex * SimplyDegeneratedTriangles = FindAllDegeneratedTriangles();
-  LOG(0, "Final list of simply degenerated triangles found, containing " << SimplyDegeneratedTriangles->size() << " triangles:");
+  LOG(2, "DEBUG: Final list of simply degenerated triangles found, containing " << SimplyDegeneratedTriangles->size() << " triangles:");
   IndexToIndex::iterator it;
   for (it = SimplyDegeneratedTriangles->begin(); it != SimplyDegeneratedTriangles->end(); it++)
-    LOG(0, (*it).first << " => " << (*it).second);
+    LOG(2, "DEBUG:   " << (*it).first << " => " << (*it).second);
   delete (SimplyDegeneratedTriangles);
   /// 5. exit
Index: src/Tesselation/tesselationhelpers.cpp
===================================================================
--- src/Tesselation/tesselationhelpers.cpp	(revision 2a3124b519027c588e363ec4c5a44171b4715777)
+++ src/Tesselation/tesselationhelpers.cpp	(revision ce7bfd57176b8ad23e9bfcc393a41c4798df77ed)
@@ -44,5 +44,5 @@
 void GetSphere(Vector * const center, const Vector &a, const Vector &b, const Vector &c, const double RADIUS)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   RealSpaceMatrix mat;
   double m11, m12, m13, m14;
@@ -109,5 +109,5 @@
     const double HalfplaneIndicator, const double AlternativeIndicator, const double alpha, const double beta, const double gamma, const double RADIUS, const double Umkreisradius)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   Vector TempNormal, helper;
   double Restradius;
@@ -123,7 +123,7 @@
   Center->Scale(1./(sin(2.*alpha) + sin(2.*beta) + sin(2.*gamma)));
   (*NewUmkreismittelpunkt) = (*Center);
-  LOG(2, "INFO: Center of new circumference is " << *NewUmkreismittelpunkt << ".");
+  LOG(4, "DEBUG: Center of new circumference is " << *NewUmkreismittelpunkt << ".");
   // Here we calculated center of circumscribing circle, using barycentric coordinates
-  LOG(2, "INFO: Center of circumference is " << *Center << " in direction " << *Direction << ".");
+  LOG(4, "DEBUG: Center of circumference is " << *Center << " in direction " << *Direction << ".");
 
   TempNormal = a - b;
@@ -147,11 +147,11 @@
   TempNormal.Normalize();
   Restradius = sqrt(RADIUS*RADIUS - Umkreisradius*Umkreisradius);
-  LOG(2, "Height of center of circumference to center of sphere is " << Restradius << ".");
+  LOG(5, "DEBUG: Height of center of circumference to center of sphere is " << Restradius << ".");
   TempNormal.Scale(Restradius);
-  LOG(2, "Shift vector to sphere of circumference is " << TempNormal << ".");
+  LOG(5, "DEBUG: Shift vector to sphere of circumference is " << TempNormal << ".");
   (*Center) += TempNormal;
-  LOG(2, "Center of sphere of circumference is " << *Center << ".");
+  LOG(5, "DEBUG: Center of sphere of circumference is " << *Center << ".");
   GetSphere(&OtherCenter, a, b, c, RADIUS);
-  LOG(2, "OtherCenter of sphere of circumference is " << OtherCenter << ".");
+  LOG(5, "DEBUG: OtherCenter of sphere of circumference is " << OtherCenter << ".");
 };
 
@@ -165,5 +165,5 @@
 void GetCenterofCircumcircle(Vector &Center, const Vector &a, const Vector &b, const Vector &c)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   Vector helper;
   Vector SideA = b - c;
@@ -181,5 +181,5 @@
   if (fabs(helper[0]+helper[1]+helper[2]) > MYEPSILON)
     Center.Scale(1./(helper[0]+helper[1]+helper[2]));
-  LOG(1, "INFO: Center (2nd algo) is at " << Center << ".");
+  LOG(4, "DEBUG: Center (2nd algo) is at " << Center << ".");
 };
 
@@ -200,5 +200,5 @@
 double GetPathLengthonCircumCircle(const Vector &CircleCenter, const Vector &CirclePlaneNormal, const double CircleRadius, const Vector &NewSphereCenter, const Vector &OldSphereCenter, const Vector &NormalVector, const Vector &SearchDirection, const double HULLEPSILON)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   Vector helper;
   double radius, alpha;
@@ -220,13 +220,13 @@
   if (helper.ScalarProduct(SearchDirection) < -HULLEPSILON)  // acos is not unique on [0, 2.*M_PI), hence extra check to decide between two half intervals
     alpha = 2.*M_PI - alpha;
-  LOG(1, "INFO: RelativeNewSphereCenter is " << helper << ", RelativeOldSphereCenter is " << RelativeOldSphereCenter << " and resulting angle is " << alpha << ".");
+  LOG(3, "DEBUG: RelativeNewSphereCenter is " << helper << ", RelativeOldSphereCenter is " << RelativeOldSphereCenter << " and resulting angle is " << alpha << ".");
   radius = helper.distance(RelativeOldSphereCenter);
   helper.ProjectOntoPlane(NormalVector);
   // check whether new center is somewhat away or at least right over the current baseline to prevent intersecting triangles
   if ((radius > HULLEPSILON) || (helper.Norm() < HULLEPSILON)) {
-    LOG(1, "INFO: Distance between old and new center is " << radius << " and between new center and baseline center is " << helper.Norm() << ".");
+    LOG(4, "DEBUG: Distance between old and new center is " << radius << " and between new center and baseline center is " << helper.Norm() << ".");
     return alpha;
   } else {
-    LOG(1, "INFO: NewSphereCenter " << RelativeNewSphereCenter << " is too close to RelativeOldSphereCenter" << RelativeOldSphereCenter << ".");
+    LOG(3, "DEBUG: NewSphereCenter " << RelativeNewSphereCenter << " is too close to RelativeOldSphereCenter" << RelativeOldSphereCenter << ".");
     return 2.*M_PI;
   }
@@ -251,5 +251,5 @@
 double GetAngle(const Vector &point, const Vector &reference, const Vector &OrthogonalVector)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   if (reference.IsZero())
     return M_PI;
@@ -278,5 +278,5 @@
 double CalculateVolumeofGeneralTetraeder(const Vector &a, const Vector &b, const Vector &c, const Vector &d)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   Vector Point, TetraederVector[3];
   double volume;
@@ -302,5 +302,5 @@
 double CalculateAreaofGeneralTriangle(const Vector &A, const Vector &B, const Vector &C)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
 
   const double sidea = B.distance(C);
@@ -322,5 +322,5 @@
 bool CheckLineCriteriaForDegeneratedTriangle(const BoundaryPointSet * const nodes[3])
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   bool result = false;
   int counter = 0;
@@ -360,5 +360,5 @@
 //bool SortCandidates(const CandidateForTesselation* candidate1, const CandidateForTesselation* candidate2)
 //{
-//	Info FunctionInfo(__func__);
+//	//Info FunctionInfo(__func__);
 //  Vector BaseLineVector, OrthogonalVector, helper;
 //  if (candidate1->BaseLine != candidate2->BaseLine) {  // sanity check
@@ -411,5 +411,5 @@
 TesselPoint* FindSecondClosestTesselPoint(const Vector& Point, const LinkedCell_deprecated* const LC)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   TesselPoint* closestPoint = NULL;
   TesselPoint* secondClosestPoint = NULL;
@@ -422,5 +422,5 @@
   for(int i=0;i<NDIM;i++) // store indices of this cell
     N[i] = LC->n[i];
-  LOG(1, "INFO: Center cell is " << N[0] << ", " << N[1] << ", " << N[2] << " with No. " << LC->index << ".");
+  LOG(2, "DEBUG: Center cell is " << N[0] << ", " << N[1] << ", " << N[2] << " with No. " << LC->index << ".");
 
   LC->GetNeighbourBounds(Nlower, Nupper);
@@ -463,5 +463,5 @@
 TesselPoint* FindClosestTesselPoint(const Vector& Point, TesselPoint *&SecondPoint, const LinkedCell_deprecated* const LC)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   TesselPoint* closestPoint = NULL;
   SecondPoint = NULL;
@@ -474,5 +474,5 @@
   for(int i=0;i<NDIM;i++) // store indices of this cell
     N[i] = LC->n[i];
-  LOG(1, "INFO: Center cell is " << N[0] << ", " << N[1] << ", " << N[2] << " with No. " << LC->index << ".");
+  LOG(2, "DEBUG: Center cell is " << N[0] << ", " << N[1] << ", " << N[2] << " with No. " << LC->index << ".");
 
   LC->GetNeighbourBounds(Nlower, Nupper);
@@ -504,10 +504,10 @@
   // output
   if (closestPoint != NULL) {
-    if (DoLog(1)) {
+    if (DoLog(3)) {
       std::stringstream output;
       output << "Closest point is " << *closestPoint;
       if (SecondPoint != NULL)
         output << " and second closest is " << *SecondPoint;
-      LOG(0, output.str() << ".");
+      LOG(3, "DEBUG: " << output.str() << ".");
     }
   }
@@ -523,5 +523,5 @@
 Vector * GetClosestPointBetweenLine(const BoundaryLineSet * const Base, const BoundaryLineSet * const OtherBase)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   // construct the plane of the two baselines (i.e. take both their directional vectors)
   Vector Baseline = (Base->endpoints[1]->node->getPosition()) - (Base->endpoints[0]->node->getPosition());
@@ -557,5 +557,5 @@
 double DistanceToTrianglePlane(const Vector *x, const BoundaryTriangleSet * const triangle)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   double distance = 0.;
   if (x == NULL) {
@@ -574,5 +574,5 @@
 void WriteVrmlFile(ofstream * const vrmlfile, const Tesselation * const Tess, IPointCloud & cloud)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   TesselPoint *Walker = NULL;
   int i;
@@ -618,5 +618,5 @@
 void IncludeSphereinRaster3D(ofstream * const rasterfile, const Tesselation * const Tess, IPointCloud & cloud)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   Vector helper;
 
@@ -646,5 +646,5 @@
 void WriteRaster3dFile(ofstream * const rasterfile, const Tesselation * const Tess, IPointCloud & cloud)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   TesselPoint *Walker = NULL;
   int i;
@@ -696,5 +696,5 @@
 void WriteTecplotFile(ofstream * const tecplot, const Tesselation * const TesselStruct, IPointCloud & cloud, const int N)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   if ((tecplot != NULL) && (TesselStruct != NULL)) {
     // write header
@@ -752,5 +752,5 @@
 void CalculateConcavityPerBoundaryPoint(const Tesselation * const TesselStruct)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   class BoundaryPointSet *point = NULL;
   class BoundaryLineSet *line = NULL;
@@ -813,5 +813,5 @@
 void CalculateConstrictionPerBoundaryPoint(const Tesselation * const TesselStruct, const Tesselation * const Convex)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   double distance = 0.;
 
@@ -837,5 +837,5 @@
 bool CheckListOfBaselines(const Tesselation * const TesselStruct)
 {
-	Info FunctionInfo(__func__);
+	//Info FunctionInfo(__func__);
   LineMap::const_iterator testline;
   bool result = false;
@@ -862,5 +862,5 @@
 int CountTrianglePairContainingPolygon(const BoundaryPolygonSet * const P, const TriangleSet * const T)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   // check number of endpoints in *P
   if (P->endpoints.size() != 4) {
@@ -875,5 +875,5 @@
   }
 
-  LOG(0, "Polygon is " << *P);
+  LOG(3, "DEBUG: Polygon is " << *P);
   // create each pair, get the endpoints and check whether *P is contained.
   int counter = 0;
@@ -891,14 +891,14 @@
         const int size = PairTrianglenodes.endpoints.size();
         if (size == 4) {
-          LOG(0, " Current pair of triangles: " << **Walker << "," << **PairWalker << " with " << size << " distinct endpoints:" << PairTrianglenodes);
+          LOG(4, "DEBUG:  Current pair of triangles: " << **Walker << "," << **PairWalker << " with " << size << " distinct endpoints:" << PairTrianglenodes);
           // now check
           if (PairTrianglenodes.ContainsPresentTupel(P)) {
             counter++;
-            LOG(0, "  ACCEPT: Matches with " << *P);
+            LOG(5, "  ACCEPT: Matches with " << *P);
           } else {
-            LOG(0, "  REJECT: No match with " << *P);
+            LOG(5, "  REJECT: No match with " << *P);
           }
         } else {
-          LOG(0, "  REJECT: Less than four endpoints.");
+          LOG(5, "  REJECT: Less than four endpoints.");
         }
       }
@@ -916,10 +916,10 @@
 bool ArePolygonsEdgeConnected(const BoundaryPolygonSet * const P1, const BoundaryPolygonSet * const P2)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   int counter = 0;
   for(PointSet::const_iterator Runner = P1->endpoints.begin(); Runner != P1->endpoints.end(); Runner++) {
     if (P2->ContainsBoundaryPoint((*Runner))) {
       counter++;
-      LOG(1, *(*Runner) << " of second polygon is found in the first one.");
+      LOG(5, "DEBUG: " << *(*Runner) << " of second polygon is found in the first one.");
       return true;
     }
@@ -934,10 +934,10 @@
 void CombinePolygons(BoundaryPolygonSet * const P1, BoundaryPolygonSet * &P2)
 {
-  Info FunctionInfo(__func__);
+  //Info FunctionInfo(__func__);
   pair <PointSet::iterator, bool> Tester;
   for(PointSet::iterator Runner = P2->endpoints.begin(); Runner != P2->endpoints.end(); Runner++) {
     Tester = P1->endpoints.insert((*Runner));
     if (Tester.second)
-      LOG(0, "Inserting endpoint " << *(*Runner) << " into first polygon.");
+      LOG(4, "DEBUG: Inserting endpoint " << *(*Runner) << " into first polygon.");
   }
   P2->endpoints.clear();
