Index: src/analysis_correlation.hpp
===================================================================
--- src/analysis_correlation.hpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/analysis_correlation.hpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -72,4 +72,5 @@
   if (map == NULL) {
     eLog() << Verbose(0) << "Nothing to min/max, map is NULL!" << endl;
+    performCriticalExit();
     return;
   }
@@ -107,4 +108,5 @@
   if (map == NULL) {
     eLog() << Verbose(0) << "Nothing to bin, is NULL!" << endl;
+    performCriticalExit();
     return outmap;
   }
Index: src/analyzer.cpp
===================================================================
--- src/analyzer.cpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/analyzer.cpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -94,5 +94,5 @@
   if (!Hcorrection.ParseFragmentMatrix(argv[1], "", HCORRECTIONSUFFIX,0,0)) {
     NoHCorrection = true;
-    Log() << Verbose(0) << "No HCorrection file found, skipping these." << endl;
+    eLog() << Verbose(2) << "No HCorrection file found, skipping these." << endl;
   }
   
@@ -100,9 +100,9 @@
   if (!Hessian.ParseFragmentMatrix(argv[1], dir, HessianSuffix,0,0)) {
     NoHessian = true;
-    Log() << Verbose(0) << "No Hessian file found, skipping these." << endl;
+    eLog() << Verbose(2) << "No Hessian file found, skipping these." << endl;
   }
   if (!Time.ParseFragmentMatrix(argv[1], dir, TimeSuffix, 10,1)) {
     NoTime = true;
-    Log() << Verbose(0) << "No speed file found, skipping these." << endl;
+    eLog() << Verbose(2) << "No speed file found, skipping these." << endl;
   }
   if (periode != NULL) { // also look for PAS values
Index: src/atom_bondedparticle.cpp
===================================================================
--- src/atom_bondedparticle.cpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/atom_bondedparticle.cpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -44,11 +44,11 @@
 void BondedParticle::OutputBondOfAtom() const
 {
-  Log() << Verbose(4) << "Atom " << Name << "/" << nr << " with " << ListOfBonds.size() << " bonds: ";
+  Log() << Verbose(4) << "Atom " << Name << "/" << nr << " with " << ListOfBonds.size() << " bonds: " << endl;
   int TotalDegree = 0;
   for (BondList::const_iterator Runner = ListOfBonds.begin(); Runner != ListOfBonds.end(); ++Runner) {
-    Log() << Verbose(0) << **Runner << "\t";
+    Log() << Verbose(4) << **Runner << endl;
     TotalDegree += (*Runner)->BondDegree;
   }
-  Log() << Verbose(0) << " -- TotalDegree: " << TotalDegree << endl;
+  Log() << Verbose(4) << " -- TotalDegree: " << TotalDegree << endl;
 };
 
@@ -75,8 +75,8 @@
       status = true;
     } else {
-      Log() << Verbose(1) << "ERROR: " << *Binder << " does not contain " << *this << "." << endl;
+      eLog() << Verbose(1) << *Binder << " does not contain " << *this << "." << endl;
     }
   } else {
-    Log() << Verbose(1) << "ERROR: Binder is " << Binder << "." << endl;
+    eLog() << Verbose(1) << "Binder is " << Binder << "." << endl;
   }
   return status;
@@ -94,8 +94,8 @@
       status = true;
     } else {
-      Log() << Verbose(1) << "ERROR: " << *Binder << " does not contain " << *this << "." << endl;
+      eLog() << Verbose(1) << *Binder << " does not contain " << *this << "." << endl;
     }
   } else {
-    Log() << Verbose(1) << "ERROR: Binder is " << Binder << "." << endl;
+    eLog() << Verbose(1) << "Binder is " << Binder << "." << endl;
   }
   return status;
@@ -121,12 +121,12 @@
   bond *CandidateBond = NULL;
 
+  NoBonds = CountBonds();
   //Log() << Verbose(3) << "Walker " << *this << ": " << (int)this->type->NoValenceOrbitals << " > " << NoBonds << "?" << endl;
-  NoBonds = CountBonds();
   if ((int)(type->NoValenceOrbitals) > NoBonds) { // we have a mismatch, check all bonding partners for mismatch
     for (BondList::const_iterator Runner = ListOfBonds.begin(); Runner != ListOfBonds.end(); (++Runner)) {
       OtherWalker = (*Runner)->GetOtherAtom(this);
       OtherNoBonds = OtherWalker->CountBonds();
-      //Log() << Verbose(3) << "OtherWalker " << *OtherWalker << ": " << (int)OtherWalker->type->NoValenceOrbitals << " > " << NoBonds << "?" << endl;
-      if ((int)(OtherWalker->type->NoValenceOrbitals) > NoBonds) { // check if possible candidate
+      //Log() << Verbose(3) << "OtherWalker " << *OtherWalker << ": " << (int)OtherWalker->type->NoValenceOrbitals << " > " << OtherNoBonds << "?" << endl;
+      if ((int)(OtherWalker->type->NoValenceOrbitals) > OtherNoBonds) { // check if possible candidate
         if ((CandidateBond == NULL) || (ListOfBonds.size() > OtherWalker->ListOfBonds.size())) { // pick the one with fewer number of bonds first
           CandidateBond = (*Runner);
@@ -137,7 +137,7 @@
     if ((CandidateBond != NULL)) {
       CandidateBond->BondDegree++;
-      Log() << Verbose(2) << "Increased bond degree for bond " << *CandidateBond << "." << endl;
+      //Log() << Verbose(2) << "Increased bond degree for bond " << *CandidateBond << "." << endl;
     } else {
-      //Log() << Verbose(2) << "Could not find correct degree for atom " << *this << "." << endl;
+      eLog() << Verbose(2) << "Could not find correct degree for atom " << *this << "." << endl;
       FalseBondDegree++;
     }
Index: src/atom_graphnode.cpp
===================================================================
--- src/atom_graphnode.cpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/atom_graphnode.cpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -29,5 +29,5 @@
   Log() << Verbose(2) << "Atom " << Name << " is " << ((SeparationVertex) ? "a" : "not a") << " separation vertex, components are ";
   OutputComponentNumber();
-  Log() << Verbose(0) << " with Lowpoint " << LowpointNr << " and Graph Nr. " << GraphNr << "." << endl;
+  Log() << Verbose(3) << " with Lowpoint " << LowpointNr << " and Graph Nr. " << GraphNr << "." << endl;
 };
 
@@ -40,5 +40,5 @@
   if (ComponentNr != NULL) {
     for (int i=0; ComponentNr[i] != -1; i++)
-      Log() << Verbose(0) << ComponentNr[i] << " ";
+      Log() << Verbose(2) << ComponentNr[i] << " ";
   }
 };
Index: src/atom_trajectoryparticle.cpp
===================================================================
--- src/atom_trajectoryparticle.cpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/atom_trajectoryparticle.cpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -203,5 +203,5 @@
         U[d] = gsl_ran_gaussian (r, sigma);
       }
-      Log() << Verbose(0) << sqrt(U[0]*U[0]+U[1]*U[1]+U[2]*U[2]) << endl;
+      Log() << Verbose(2) << sqrt(U[0]*U[0]+U[1]*U[1]+U[2]*U[2]) << endl;
     }
     for (int d=0; d<NDIM; d++)
Index: src/bond.cpp
===================================================================
--- src/bond.cpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/bond.cpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -63,5 +63,5 @@
   if(rightatom == Atom) 
     return leftatom;
-  eLog() << Verbose(0) << "Bond " << *this << " does not contain atom " << *Atom << "!" << endl;
+  eLog() << Verbose(1) << "Bond " << *this << " does not contain atom " << *Atom << "!" << endl;
   return NULL;
 };
@@ -99,5 +99,5 @@
 bool bond::MarkUsed(const enum Shading color) {
   if (Used == black) {
-    eLog() << Verbose(0) << "ERROR: Bond " << this << " was already marked black!." << endl;
+    eLog() << Verbose(1) << "Bond " << this << " was already marked black!." << endl;
     return false;
   } else {
Index: src/bondgraph.cpp
===================================================================
--- src/bondgraph.cpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/bondgraph.cpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -153,5 +153,5 @@
 {
   if (BondLengthMatrix == NULL) {// safety measure if no matrix has been parsed yet
-    eLog() << Verbose(1) << "WARNING:  BondLengthMatrixMinMaxDistance() called without having parsed the bond length matrix yet!" << endl;
+    eLog() << Verbose(2) << "BondLengthMatrixMinMaxDistance() called without having parsed the bond length matrix yet!" << endl;
     CovalentMinMaxDistance(Walker, OtherWalker, MinDistance, MaxDistance, IsAngstroem);
   } else {
Index: src/boundary.cpp
===================================================================
--- src/boundary.cpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/boundary.cpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -176,5 +176,5 @@
         angle = 0.; // otherwise it's a vector in Axis Direction and unimportant for boundary issues
 
-      //Log() << Verbose(0) << "Checking sign in quadrant : " << ProjectedVector.Projection(&AngleReferenceNormalVector) << "." << endl;
+      //Log() << Verbose(2) << "Checking sign in quadrant : " << ProjectedVector.Projection(&AngleReferenceNormalVector) << "." << endl;
       if (ProjectedVector.ScalarProduct(&AngleReferenceNormalVector) > 0) {
         angle = 2. * M_PI - angle;
@@ -214,10 +214,10 @@
     //      for(Boundaries::iterator runner = BoundaryPoints[axis].begin(); runner != BoundaryPoints[axis].end(); runner++) {
     //        if (runner != BoundaryPoints[axis].begin())
-    //          Log() << Verbose(0) << ", " << i << ": " << *runner->second.second;
+    //          Log() << Verbose(2) << ", " << i << ": " << *runner->second.second;
     //        else
-    //          Log() << Verbose(0) << i << ": " << *runner->second.second;
+    //          Log() << Verbose(2) << i << ": " << *runner->second.second;
     //        i++;
     //      }
-    //      Log() << Verbose(0) << endl;
+    //      Log() << Verbose(2) << endl;
     //    }
     // 3c. throw out points whose distance is less than the mean of left and right neighbours
@@ -249,28 +249,20 @@
           SideA.SubtractVector(MolCenter);
           SideA.ProjectOntoPlane(&AxisVector);
-          //          Log() << Verbose(0) << "SideA: ";
-          //          SideA.Output(out);
-          //          Log() << Verbose(0) << endl;
+          //          Log() << Verbose(0) << "SideA: " << SideA << endl;
 
           SideB.CopyVector(&right->second.second->x);
           SideB.SubtractVector(MolCenter);
           SideB.ProjectOntoPlane(&AxisVector);
-          //          Log() << Verbose(0) << "SideB: ";
-          //          SideB.Output(out);
-          //          Log() << Verbose(0) << endl;
+          //          Log() << Verbose(0) << "SideB: " << SideB << endl;
 
           SideC.CopyVector(&left->second.second->x);
           SideC.SubtractVector(&right->second.second->x);
           SideC.ProjectOntoPlane(&AxisVector);
-          //          Log() << Verbose(0) << "SideC: ";
-          //          SideC.Output(out);
-          //          Log() << Verbose(0) << endl;
+          //          Log() << Verbose(0) << "SideC: " << SideC << endl;
 
           SideH.CopyVector(&runner->second.second->x);
           SideH.SubtractVector(MolCenter);
           SideH.ProjectOntoPlane(&AxisVector);
-          //          Log() << Verbose(0) << "SideH: ";
-          //          SideH.Output(out);
-          //          Log() << Verbose(0) << endl;
+          //          Log() << Verbose(0) << "SideH: " << SideH << endl;
 
           // calculate each length
@@ -335,10 +327,10 @@
       for(Boundaries::iterator runner = BoundaryPoints[axis].begin(); runner != BoundaryPoints[axis].end(); runner++) {
         if (runner != BoundaryPoints[axis].begin())
-          Log() << Verbose(0) << ", " << i << ": " << *runner->second.second;
+          Log() << Verbose(2) << ", " << i << ": " << *runner->second.second;
         else
-          Log() << Verbose(0) << i << ": " << *runner->second.second;
+          Log() << Verbose(2) << i << ": " << *runner->second.second;
         i++;
       }
-      Log() << Verbose(0) << endl;
+      Log() << Verbose(2) << endl;
     }
 
@@ -347,5 +339,5 @@
     for (Boundaries::iterator runner = BoundaryPoints[axis].begin(); runner != BoundaryPoints[axis].end(); runner++)
         if (!TesselStruct->AddBoundaryPoint(runner->second.second, 0))
-          Log() << Verbose(3) << "WARNING: Point " << *(runner->second.second) << " is already present!" << endl;
+          eLog() << Verbose(2) << "Point " << *(runner->second.second) << " is already present!" << endl;
 
   Log() << Verbose(2) << "I found " << TesselStruct->PointsOnBoundaryCount << " points on the convex boundary." << endl;
@@ -355,7 +347,7 @@
   //  Log() << Verbose(1) << "Listing PointsOnBoundary:";
   //  for(PointMap::iterator runner = PointsOnBoundary.begin(); runner != PointsOnBoundary.end(); runner++) {
-  //    Log() << Verbose(0) << " " << *runner->second;
+  //    Log() << Verbose(1) << " " << *runner->second;
   //  }
-  //  Log() << Verbose(0) << endl;
+  //  Log() << Verbose(1) << endl;
 
   // 3a. guess starting triangle
@@ -406,5 +398,5 @@
         // flip the line
         if (TesselStruct->PickFarthestofTwoBaselines(line) == 0.)
-          Log() << Verbose(1) << "ERROR: Correction of concave baselines failed!" << endl;
+          eLog() << Verbose(1) << "Correction of concave baselines failed!" << endl;
         else {
           TesselStruct->FlipBaseline(line);
@@ -462,5 +454,5 @@
 
   if ((TesselStruct == NULL) || (TesselStruct->PointsOnBoundary.empty())) {
-    Log() << Verbose(2) << "ERROR: TesselStruct is empty." << endl;
+    eLog() << Verbose(1) << "TesselStruct is empty." << endl;
     return false;
   }
@@ -470,6 +462,6 @@
     Log() << Verbose(2) << "Remaining points are: ";
     for (PointMap::iterator PointSprinter = TesselStruct->PointsOnBoundary.begin(); PointSprinter != TesselStruct->PointsOnBoundary.end(); PointSprinter++)
-      Log() << Verbose(0) << *(PointSprinter->second) << "\t";
-    Log() << Verbose(0) << endl;
+      Log() << Verbose(2) << *(PointSprinter->second) << "\t";
+    Log() << Verbose(2) << endl;
 
     PointRunner = TesselStruct->PointsOnBoundary.begin();
@@ -528,5 +520,5 @@
   // check whether there is something to work on
   if (TesselStruct == NULL) {
-    Log() << Verbose(1) << "ERROR: TesselStruct is empty!" << endl;
+    eLog() << Verbose(1) << "TesselStruct is empty!" << endl;
     return volume;
   }
@@ -679,5 +671,5 @@
       OutputName.append(TecplotSuffix);
       ofstream *tecplot = new ofstream(OutputName.c_str());
-      WriteTecplotFile(tecplot, TesselStruct, mol, 0);
+      WriteTecplotFile(tecplot, TesselStruct, mol, -1);
       tecplot->close();
       delete(tecplot);
@@ -756,5 +748,5 @@
   Log() << Verbose(1) << "Minimum volume of the convex envelope contained in a rectangular box is " << minimumvolume << " atomicmassunit/" << (IsAngstroem ? "angstrom" : "atomiclength") << "^3." << endl;
   if (minimumvolume > cellvolume) {
-    eLog() << Verbose(0) << "ERROR: the containing box already has a greater volume than the envisaged cell volume!" << endl;
+    eLog() << Verbose(1) << "the containing box already has a greater volume than the envisaged cell volume!" << endl;
     Log() << Verbose(0) << "Setting Box dimensions to minimum possible, the greatest diameters." << endl;
     for (int i = 0; i < NDIM; i++)
@@ -849,9 +841,9 @@
   for(int i=0;i<NDIM;i++) {
     N[i] = (int) ceil(1./FillerDistance.x[i]);
-    Log() << Verbose(0) << N[i];
+    Log() << Verbose(1) << N[i];
     if (i != NDIM-1)
-      Log() << Verbose(0)<< ", ";
+      Log() << Verbose(1)<< ", ";
     else
-      Log() << Verbose(0) << "." << endl;
+      Log() << Verbose(1) << "." << endl;
   }
 
@@ -870,5 +862,5 @@
           // get linked cell list
           if (TesselStruct[i] == NULL) {
-            Log() << Verbose(1) << "ERROR: TesselStruct of " << (*ListRunner) << " is NULL. Didn't we pre-create it?" << endl;
+            eLog() << Verbose(1) << "TesselStruct of " << (*ListRunner) << " is NULL. Didn't we pre-create it?" << endl;
             FillIt = false;
           } else {
@@ -994,9 +986,10 @@
   while ((baseline != TesselStruct->LinesOnBoundary.end()) || (OneLoopWithoutSuccessFlag)) {
     if (baseline->second->triangles.size() == 1) {
+      CheckListOfBaselines(TesselStruct);
       // 3. find next triangle
       TesselationFailFlag = TesselStruct->FindNextSuitableTriangle(*(baseline->second), *(((baseline->second->triangles.begin()))->second), RADIUS, LCList); //the line is there, so there is a triangle, but only one.
       OneLoopWithoutSuccessFlag = OneLoopWithoutSuccessFlag || TesselationFailFlag;
       if (!TesselationFailFlag)
-        eLog() << Verbose(0) << "WARNING: FindNextSuitableTriangle failed." << endl;
+        eLog() << Verbose(2) << "FindNextSuitableTriangle failed." << endl;
 
       // write temporary envelope
@@ -1006,10 +999,15 @@
         }
       }
-      baseline = TesselStruct->LinesOnBoundary.end();
-      Log() << Verbose(2) << "Baseline set to end." << endl;
+      if (TesselationFailFlag) {
+        baseline = TesselStruct->LinesOnBoundary.begin();
+        OneLoopWithoutSuccessFlag = false;
+        Log() << Verbose(2) << "Baseline set to begin." << endl;
+      }
     } else {
       //Log() << Verbose(1) << "Line " << *baseline->second << " has " << baseline->second->triangles.size() << " triangles adjacent" << endl;
-      if (baseline->second->triangles.size() != 2)
-        Log() << Verbose(1) << "ERROR: TESSELATION FINISHED WITH INVALID TRIANGLE COUNT!" << endl;
+      if (baseline->second->triangles.size() != 2) {
+        eLog() << Verbose(0) << "TESSELATION FINISHED WITH INVALID TRIANGLE COUNT!" << endl;
+        performCriticalExit();
+      }
     }
 
Index: src/boundary.hpp
===================================================================
--- src/boundary.hpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/boundary.hpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -35,5 +35,5 @@
 
 #define DEBUG 1
-#define DoSingleStepOutput 0
+#define DoSingleStepOutput 1
 #define SingleStepWidth 1
 
Index: src/builder.cpp
===================================================================
--- src/builder.cpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/builder.cpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -95,5 +95,5 @@
   switch (choice) {
     default:
-      Log() << Verbose(0) << "Not a valid choice." << endl;
+      eLog() << Verbose(2) << "Not a valid choice." << endl;
       break;
       case 'a': // absolute coordinates of atom
@@ -109,5 +109,5 @@
         valid = true;
         do {
-          if (!valid) Log() << Verbose(0) << "Resulting position out of cell." << endl;
+          if (!valid) eLog() << Verbose(2) << "Resulting position out of cell." << endl;
           Log() << Verbose(0) << "Enter reference coordinates." << endl;
           x.AskPosition(mol->cell_size, true);
@@ -125,5 +125,5 @@
         valid = true;
         do {
-          if (!valid) Log() << Verbose(0) << "Resulting position out of cell." << endl;
+          if (!valid) eLog() << Verbose(2) << "Resulting position out of cell." << endl;
           second = mol->AskAtom("Enter atom number: ");
           Log() << Verbose(0) << "Enter relative coordinates." << endl;
@@ -142,7 +142,5 @@
         do {
           if (!valid) {
-            Log() << Verbose(0) << "Resulting coordinates out of cell - ";
-            first->x.Output();
-            Log() << Verbose(0) << endl;
+            eLog() << Verbose(2) << "Resulting coordinates out of cell - " << first->x << endl;
           }
           Log() << Verbose(0) << "First, we need two atoms, the first atom is the central, while the second is the outer one." << endl;
@@ -671,5 +669,5 @@
   Log() << Verbose(0) << "===============================================" << endl;
   if (molecules->NumberOfActiveMolecules() > 1)
-    Log() << Verbose(0) << "WARNING: There is more than one molecule active! Atoms will be added to each." << endl;
+    eLog() << Verbose(2) << "There is more than one molecule active! Atoms will be added to each." << endl;
   Log() << Verbose(0) << "INPUT: ";
   cin >> choice;
@@ -794,5 +792,5 @@
   Log() << Verbose(0) << "===============================================" << endl;
   if (molecules->NumberOfActiveMolecules() > 1)
-    Log() << Verbose(0) << "WARNING: There is more than one molecule active! Atoms will be added to each." << endl;
+    eLog() << Verbose(2) << "There is more than one molecule active! Atoms will be added to each." << endl;
   Log() << Verbose(0) << "INPUT: ";
   cin >> choice;
@@ -827,5 +825,5 @@
           }
           if (count != j)
-            Log() << Verbose(0) << "ERROR: AtomCount " << count << " is not equal to number of atoms in molecule " << j << "!" << endl;
+            eLog() << Verbose(1) << "AtomCount " << count << " is not equal to number of atoms in molecule " << j << "!" << endl;
           x.Zero();
           y.Zero();
@@ -1172,4 +1170,5 @@
   else {
     eLog() << Verbose(0) << "I don't have anything to test on ... ";
+    performCriticalExit();
     return;
   }
@@ -1248,7 +1247,8 @@
   ofstream output;
   molecule *mol = new molecule(periode);
+  mol->SetNameFromFilename(ConfigFileName);
 
   if (!strcmp(configuration->configpath, configuration->GetDefaultPath())) {
-    eLog() << Verbose(0) << "WARNING: config is found under different path then stated in config file::defaultpath!" << endl;
+    eLog() << Verbose(2) << "config is found under different path then stated in config file::defaultpath!" << endl;
   }
 
@@ -1354,5 +1354,5 @@
 
   if (!strcmp(configuration->configpath, configuration->GetDefaultPath())) {
-    eLog() << Verbose(0) << "WARNING: config is found under different path then stated in config file::defaultpath!" << endl;
+    eLog() << Verbose(2) << "config is found under different path then stated in config file::defaultpath!" << endl;
   }
 
@@ -1386,5 +1386,6 @@
   int argptr;
   molecule *mol = NULL;
-  string BondGraphFileName("");
+  string BondGraphFileName("\n");
+  int verbosity = 0;
   strncpy(configuration.databasepath, LocalPath, MAXSTRINGSIZE-1);
 
@@ -1432,9 +1433,16 @@
             Log() << Verbose(0) << "\t-T x1 x2 x3\tTranslate periodically all atoms by this vector (x1,x2,x3)." << endl;
             Log() << Verbose(0) << "\t-u rho\tsuspend in water solution and output necessary cell lengths, average density rho and repetition." << endl;
-            Log() << Verbose(0) << "\t-v/-V\t\tGives version information." << endl;
+            Log() << Verbose(0) << "\t-v\t\tsets verbosity (more is more)." << endl;
+            Log() << Verbose(0) << "\t-V\t\tGives version information." << endl;
             Log() << Verbose(0) << "Note: config files must not begin with '-' !" << endl;
             return (1);
             break;
           case 'v':
+            while (argv[argptr-1][verbosity+1] == 'v') {
+              verbosity++;
+            }
+            setVerbosity(verbosity);
+            Log() << Verbose(0) << "Setting verbosity to " << verbosity << "." << endl;
+            break;
           case 'V':
             Log() << Verbose(0) << argv[0] << " " << VERSIONSTRING << endl;
@@ -1445,4 +1453,5 @@
             if ((argptr >= argc) || (argv[argptr][0] == '-')) {
               eLog() << Verbose(0) << "Not enough or invalid arguments for specifying element db: -e <db file>" << endl;
+              performCriticalExit();
             } else {
               Log() << Verbose(0) << "Using " << argv[argptr] << " as elements database." << endl;
@@ -1454,4 +1463,5 @@
             if ((argptr >= argc) || (argv[argptr][0] == '-')) {
               eLog() << Verbose(0) << "Not enough or invalid arguments for specifying bond length table: -g <table file>" << endl;
+              performCriticalExit();
             } else {
               BondGraphFileName = argv[argptr];
@@ -1530,5 +1540,15 @@
        mol = new molecule(periode);
        mol->ActiveFlag = true;
+       if (ConfigFileName != NULL)
+         mol->SetNameFromFilename(ConfigFileName);
        molecules->insert(mol);
+     }
+     if (configuration.BG == NULL) {
+       configuration.BG = new BondGraph(configuration.GetIsAngstroem());
+       if ((BondGraphFileName.empty()) && (configuration.BG->LoadBondLengthTable(BondGraphFileName))) {
+         Log() << Verbose(0) << "Bond length table loaded successfully." << endl;
+       } else {
+         eLog() << Verbose(1) << "Bond length table loading failed." << endl;
+       }
      }
 
@@ -1546,4 +1566,5 @@
                 ExitFlag = 255;
                 eLog() << Verbose(0) << "Not enough arguments for parsing: -p <xyz file>" << endl;
+                performCriticalExit();
               } else {
                 SaveFlag = true;
@@ -1553,4 +1574,14 @@
                 else {
                   Log() << Verbose(2) << "File found and parsed." << endl;
+                  mol->SetNameFromFilename(argv[argptr]);
+                  molecules->ListOfMolecules.remove(mol);
+                  molecules->DissectMoleculeIntoConnectedSubgraphs(mol,&configuration);
+                  if (molecules->ListOfMolecules.size() != 0) {
+                    for (MoleculeList::iterator ListRunner = molecules->ListOfMolecules.begin(); ListRunner != molecules->ListOfMolecules.end(); ListRunner++)
+                      if ((*ListRunner)->ActiveFlag) {
+                        mol = *ListRunner;
+                        break;
+                      }
+                  }
                   configPresent = present;
                 }
@@ -1562,4 +1593,5 @@
                 ExitFlag = 255;
                 eLog() << Verbose(0) << "Not enough or invalid arguments for adding atom: -a <element> <x> <y> <z>" << endl;
+                performCriticalExit();
               } else {
                 SaveFlag = true;
@@ -1590,4 +1622,5 @@
                 ExitFlag = 255;
                 eLog() << Verbose(0) << "Not enough or invalid arguments given for setting MPQC basis: -B <basis name>" << endl;
+                performCriticalExit();
               } else {
                 configuration.basis = argv[argptr];
@@ -1634,4 +1667,5 @@
                 ExitFlag = 255;
                 eLog() << Verbose(0) << "Not enough or invalid arguments given for pair correlation analysis: -C <Z> <output> <bin output>" << endl;
+                performCriticalExit();
               } else {
                 SaveFlag = false;
@@ -1680,4 +1714,5 @@
                 ExitFlag = 255;
                 eLog() << Verbose(0) << "Not enough or invalid arguments given for changing element: -E <atom nr.> <element>" << endl;
+                performCriticalExit();
               } else {
                 SaveFlag = true;
@@ -1693,4 +1728,5 @@
                 ExitFlag = 255;
                 eLog() << Verbose(0) << "Not enough or invalid arguments given for filling box with water: -F <dist_x> <dist_y> <dist_z> <randatom> <randmol> <DoRotate>" << endl;
+                performCriticalExit();
               } else {
                 SaveFlag = true;
@@ -1731,4 +1767,5 @@
                 ExitFlag =255;
                 eLog() << Verbose(0) << "Missing source file for bonds in molecule: -A <bond sourcefile>" << endl;
+                performCriticalExit();
               } else {
                 Log() << Verbose(0) << "Parsing bonds from " << argv[argptr] << "." << endl;
@@ -1744,14 +1781,26 @@
                 ExitFlag = 255;
                 eLog() << Verbose(0) << "Not enough or invalid arguments given for non-convex envelope: -o <radius> <tecplot output file>" << endl;
+                performCriticalExit();
               } else {
                 class Tesselation *T = NULL;
                 const LinkedCell *LCList = NULL;
-                string filename(argv[argptr+1]);
-                filename.append(".csv");
-                Log() << Verbose(0) << "Evaluating non-convex envelope.";
+                molecule * Boundary = NULL;
+                //string filename(argv[argptr+1]);
+                //filename.append(".csv");
+                Log() << Verbose(0) << "Evaluating non-convex envelope of biggest molecule.";
                 Log() << Verbose(1) << "Using rolling ball of radius " << atof(argv[argptr]) << " and storing tecplot data in " << argv[argptr+1] << "." << endl;
+                // find biggest molecule
+                int counter  = 0;
+                for (MoleculeList::iterator BigFinder = molecules->ListOfMolecules.begin(); BigFinder != molecules->ListOfMolecules.end(); BigFinder++) {
+                  (*BigFinder)->CountAtoms();
+                  if ((Boundary == NULL) || (Boundary->AtomCount < (*BigFinder)->AtomCount)) {
+                    Boundary = *BigFinder;
+                  }
+                  counter++;
+                }
+                Log() << Verbose(1) << "Biggest molecule has " << Boundary->AtomCount << " atoms." << endl;
                 start = clock();
-                LCList = new LinkedCell(mol, atof(argv[argptr])*2.);
-                FindNonConvexBorder(mol, T, LCList, atof(argv[argptr]), argv[argptr+1]);
+                LCList = new LinkedCell(Boundary, atof(argv[argptr])*2.);
+                FindNonConvexBorder(Boundary, T, LCList, atof(argv[argptr]), argv[argptr+1]);
                 //FindDistributionOfEllipsoids(T, &LCList, N, number, filename.c_str());
                 end = clock();
@@ -1766,4 +1815,5 @@
                 ExitFlag = 255;
                 eLog() << Verbose(0) << "Not enough or invalid arguments given for storing tempature: -S <temperature file>" << endl;
+                performCriticalExit();
               } else {
                 Log() << Verbose(1) << "Storing temperatures in " << argv[argptr] << "." << endl;
@@ -1783,4 +1833,5 @@
                 ExitFlag = 255;
                 eLog() << Verbose(0) << "Not enough or invalid arguments given for storing tempature: -L <step0> <step1> <prefix> <identity mapping?>" << endl;
+                performCriticalExit();
               } else {
                 SaveFlag = true;
@@ -1800,4 +1851,5 @@
                 ExitFlag = 255;
                 eLog() << Verbose(0) << "Not enough or invalid arguments given for parsing and integrating forces: -P <forces file>" << endl;
+                performCriticalExit();
               } else {
                 SaveFlag = true;
@@ -1815,4 +1867,5 @@
                 ExitFlag = 255;
                 eLog() << Verbose(0) << "Not enough or invalid arguments given for removing atoms: -R <id> <distance>" << endl;
+                performCriticalExit();
               } else {
                 SaveFlag = true;
@@ -1830,5 +1883,5 @@
                   }
                 } else {
-                  eLog() << Verbose(0) << "Removal failed due to missing atoms on molecule or wrong id." << endl;
+                  eLog() << Verbose(1) << "Removal failed due to missing atoms on molecule or wrong id." << endl;
                 }
                 argptr+=2;
@@ -1840,4 +1893,5 @@
                 ExitFlag = 255;
                 eLog() << Verbose(0) << "Not enough or invalid arguments given for translation: -t <x> <y> <z>" << endl;
+                performCriticalExit();
               } else {
                 if (ExitFlag == 0) ExitFlag = 1;
@@ -1855,4 +1909,5 @@
                 ExitFlag = 255;
                 eLog() << Verbose(0) << "Not enough or invalid arguments given for periodic translation: -T <x> <y> <z>" << endl;
+                performCriticalExit();
               } else {
                 if (ExitFlag == 0) ExitFlag = 1;
@@ -1870,4 +1925,5 @@
                 ExitFlag = 255;
                 eLog() << Verbose(0) << "Not enough or invalid arguments given for scaling: -s <factor_x> [factor_y] [factor_z]" << endl;
+                performCriticalExit();
               } else {
                 SaveFlag = true;
@@ -1893,4 +1949,5 @@
                 ExitFlag = 255;
                 eLog() << Verbose(0) << "Not enough or invalid arguments given for centering in box: -b <xx> <xy> <xz> <yy> <yz> <zz>" << endl;
+                performCriticalExit();
               } else {
                 SaveFlag = true;
@@ -1910,4 +1967,5 @@
                 ExitFlag = 255;
                 eLog() << Verbose(0) << "Not enough or invalid arguments given for bounding in box: -B <xx> <xy> <xz> <yy> <yz> <zz>" << endl;
+                performCriticalExit();
               } else {
                 SaveFlag = true;
@@ -1927,4 +1985,5 @@
                 ExitFlag = 255;
                 eLog() << Verbose(0) << "Not enough or invalid arguments given for centering with boundary: -c <boundary_x> <boundary_y> <boundary_z>" << endl;
+                performCriticalExit();
               } else {
                 SaveFlag = true;
@@ -1960,4 +2019,5 @@
                 ExitFlag = 255;
                 eLog() << Verbose(0) << "Not enough or invalid arguments given for removing atoms: -r <id>" << endl;
+                performCriticalExit();
               } else {
                 SaveFlag = true;
@@ -1973,4 +2033,5 @@
                 ExitFlag = 255;
                 eLog() << Verbose(0) << "Not enough or invalid arguments for fragmentation: -f <max. bond distance> <bond order>" << endl;
+                performCriticalExit();
               } else {
                 Log() << Verbose(0) << "Fragmenting molecule with bond distance " << argv[argptr] << " angstroem, order of " << argv[argptr+1] << "." << endl;
@@ -1991,5 +2052,5 @@
               j = atoi(argv[argptr++]);
               if ((j<0) || (j>1)) {
-                eLog() << Verbose(1) << "ERROR: Argument of '-m' should be either 0 for no-rotate or 1 for rotate." << endl;
+                eLog() << Verbose(1) << "Argument of '-m' should be either 0 for no-rotate or 1 for rotate." << endl;
                 j = 0;
               }
@@ -2006,4 +2067,5 @@
                 ExitFlag = 255;
                 eLog() << Verbose(0) << "Not enough or invalid arguments given for convex envelope: -o <convex output file> <non-convex output file>" << endl;
+                performCriticalExit();
               } else {
                 class Tesselation *TesselStruct = NULL;
@@ -2030,5 +2092,5 @@
                 ExitFlag = 255;
                 eLog() << Verbose(0) << "Not enough or invalid arguments given for suspension with specified volume: -U <volume> <density>" << endl;
-                volume = -1; // for case 'u': don't print error again
+                performCriticalExit();
               } else {
                 volume = atof(argv[argptr++]);
@@ -2041,4 +2103,5 @@
                   ExitFlag = 255;
                   eLog() << Verbose(0) << "Not enough arguments given for suspension: -u <density>" << endl;
+                  performCriticalExit();
               } else {
                 double density;
@@ -2047,5 +2110,5 @@
                 density = atof(argv[argptr++]);
                 if (density < 1.0) {
-                  eLog() << Verbose(0) << "Density must be greater than 1.0g/cm^3 !" << endl;
+                  eLog() << Verbose(1) << "Density must be greater than 1.0g/cm^3 !" << endl;
                   density = 1.3;
                 }
@@ -2053,5 +2116,5 @@
 //                  repetition[i] = atoi(argv[argptr++]);
 //                  if (repetition[i] < 1)
-//                    eLog() << Verbose(0) << "ERROR: repetition value must be greater 1!" << endl;
+//                    eLog() << Verbose(1) << "repetition value must be greater 1!" << endl;
 //                  repetition[i] = 1;
 //                }
@@ -2064,4 +2127,5 @@
                 ExitFlag = 255;
                 eLog() << Verbose(0) << "Not enough or invalid arguments given for repeating cells: -d <repeat_x> <repeat_y> <repeat_z>" << endl;
+                performCriticalExit();
               } else {
                 SaveFlag = true;
@@ -2072,5 +2136,5 @@
                   Vector ** vectors;
                   if (faktor < 1) {
-                    eLog() << Verbose(0) << "ERROR: Repetition faktor mus be greater than 1!" << endl;
+                    eLog() << Verbose(1) << "Repetition factor mus be greater than 1!" << endl;
                     faktor = 1;
                   }
@@ -2089,5 +2153,5 @@
                     }
                     if (count != j)
-                      Log() << Verbose(0) << "ERROR: AtomCount " << count << " is not equal to number of atoms in molecule " << j << "!" << endl;
+                      eLog() << Verbose(1) << "AtomCount " << count << " is not equal to number of atoms in molecule " << j << "!" << endl;
                     x.Zero();
                     y.Zero();
@@ -2154,5 +2218,5 @@
   int j;
 
-  setVerbosity(2);
+  setVerbosity(0);
 
   // =========================== PARSE COMMAND LINE OPTIONS ====================================
Index: src/config.cpp
===================================================================
--- src/config.cpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/config.cpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -72,5 +72,5 @@
   file= new ifstream(filename);
   if (file == NULL) {
-    eLog() << Verbose(0) << "ERROR: config file " << filename << " missing!" << endl;
+    eLog() << Verbose(1) << "config file " << filename << " missing!" << endl;
     return;
   }
@@ -87,5 +87,5 @@
   // allocate buffer's 1st dimension
   if (buffer != NULL) {
-    eLog() << Verbose(0) << "ERROR: FileBuffer->buffer is not NULL!" << endl;
+    eLog() << Verbose(1) << "FileBuffer->buffer is not NULL!" << endl;
     return;
   } else
@@ -143,4 +143,5 @@
   if (LineMapping == NULL) {
     eLog() << Verbose(0) << "map pointer is NULL: " << LineMapping << endl;
+    performCriticalExit();
     return;
   }
@@ -156,6 +157,8 @@
     if (CurrentLine+nr < NoLines)
       LineMapping[CurrentLine+(nr++)] = runner->second;
-    else
+    else {
       eLog() << Verbose(0) << "config::MapIonTypesInBuffer - NoAtoms is wrong: We are past the end of the file!" << endl;
+      performCriticalExit();
+    }
   }
 }
@@ -653,5 +656,5 @@
 {
   if (FileBuffer != NULL) {
-    eLog() << Verbose(1) << "WARNING: deleting present FileBuffer in PrepareFileBuffer()." << endl;
+    eLog() << Verbose(2) << "deleting present FileBuffer in PrepareFileBuffer()." << endl;
     delete(FileBuffer);
   }
@@ -686,4 +689,5 @@
   if (MaxTypes == 0) {
     eLog() << Verbose(0) << "There are no atoms according to MaxTypes in this config file." << endl;
+    performCriticalExit();
   } else {
     // prescan number of ions per type
@@ -704,4 +708,5 @@
     if (!ParseForParameter(verbose,FileBuffer, (const char*)name, 1, 1, 1, int_type, &value[0], 1, critical)) {
       eLog() << Verbose(0) << "There are no atoms in the config file!" << endl;
+      performCriticalExit();
       return;
     }
@@ -847,5 +852,5 @@
   ifstream *file = new ifstream(filename);
   if (file == NULL) {
-    eLog() << Verbose(0) << "ERROR: config file " << filename << " missing!" << endl;
+    eLog() << Verbose(1) << "config file " << filename << " missing!" << endl;
     return;
   }
@@ -1051,13 +1056,16 @@
 
   // 2. parse the bond graph file if given
-  BG = new BondGraph(IsAngstroem);
-  if (BG->LoadBondLengthTable(BondGraphFileName)) {
-    Log() << Verbose(0) << "Bond length table loaded successfully." << endl;
-  } else {
-    Log() << Verbose(0) << "Bond length table loading failed." << endl;
+  if (BG == NULL) {
+    BG = new BondGraph(IsAngstroem);
+    if (BG->LoadBondLengthTable(BondGraphFileName)) {
+      Log() << Verbose(0) << "Bond length table loaded successfully." << endl;
+    } else {
+      eLog() << Verbose(1) << "Bond length table loading failed." << endl;
+    }
   }
 
   // 3. parse the molecule in
   LoadMolecule(mol, FileBuffer, periode, FastParsing);
+  mol->SetNameFromFilename(filename);
   mol->ActiveFlag = true;
 
@@ -1080,5 +1088,5 @@
   ifstream *file = new ifstream(filename);
   if (file == NULL) {
-    eLog() << Verbose(0) << "ERROR: config file " << filename << " missing!" << endl;
+    eLog() << Verbose(1) << "config file " << filename << " missing!" << endl;
     return;
   }
Index: src/ellipsoid.cpp
===================================================================
--- src/ellipsoid.cpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/ellipsoid.cpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -241,5 +241,5 @@
     x = new Vector[PointsToPick];
   } else {
-    eLog() << Verbose(2) << "WARNING: Given pointer to vector array seems already allocated." << endl;
+    eLog() << Verbose(2) << "Given pointer to vector array seems already allocated." << endl;
   }
 
@@ -341,5 +341,5 @@
     x = new Vector[PointsToPick];
   } else {
-    eLog() << Verbose(2) << "WARNING: Given pointer to vector array seems already allocated." << endl;
+    eLog() << Verbose(2) << "Given pointer to vector array seems already allocated." << endl;
   }
 
Index: src/errorlogger.cpp
===================================================================
--- src/errorlogger.cpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/errorlogger.cpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -82,18 +82,18 @@
   l.nix->clear();
   if (v.DoOutput(verbosityLevel)) {
-    v.print(cout);
     switch(v.Verbosity) {
       case 0:
-        cout << "CRITICAL: ";
+        cerr << "CRITICAL: ";
         break;
       case 1:
-        cout << "ERROR: ";
+        cerr << "ERROR: ";
         break;
       case 2:
-        cout << "WARNING: ";
+        cerr << "WARNING: ";
         break;
       default:
         break;
     }
+    v.print(cerr);
     return cerr;
   } else
@@ -105,18 +105,18 @@
   l->nix->clear();
   if (v.DoOutput(verbosityLevel)) {
-    v.print(cout);
     switch(v.Verbosity) {
       case 0:
-        cout << "CRITICAL: ";
+        cerr << "CRITICAL: ";
         break;
       case 1:
-        cout << "ERROR: ";
+        cerr << "ERROR: ";
         break;
       case 2:
-        cout << "WARNING: ";
+        cerr << "WARNING: ";
         break;
       default:
         break;
     }
+    v.print(cerr);
     return cerr;
   } else
Index: src/helpers.hpp
===================================================================
--- src/helpers.hpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/helpers.hpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -111,4 +111,5 @@
   if (LookupTable == NULL) {
     eLog() << Verbose(0) << "LookupTable memory allocation failed!" << endl;
+    performCriticalExit();
     status = false;
   } else {
Index: src/linkedcell.cpp
===================================================================
--- src/linkedcell.cpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/linkedcell.cpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -47,5 +47,5 @@
   Log() << Verbose(1) << "Begin of LinkedCell" << endl;
   if (set->IsEmpty()) {
-    eLog() << Verbose(0) << "ERROR: set contains no linked cell nodes!" << endl;
+    eLog() << Verbose(1) << "set contains no linked cell nodes!" << endl;
     return;
   }
@@ -79,5 +79,5 @@
   Log() << Verbose(2) << "Allocating cells ... ";
   if (LC != NULL) {
-    Log() << Verbose(1) << "ERROR: Linked Cell list is already allocated, I do nothing." << endl;
+    eLog() << Verbose(1) << "Linked Cell list is already allocated, I do nothing." << endl;
     return;
   }
@@ -122,5 +122,5 @@
   Log() << Verbose(1) << "Begin of LinkedCell" << endl;
   if (set->empty()) {
-    eLog() << Verbose(0) << "ERROR: set contains no linked cell nodes!" << endl;
+    eLog() << Verbose(1) << "set contains no linked cell nodes!" << endl;
     return;
   }
@@ -151,5 +151,5 @@
   Log() << Verbose(2) << "Allocating cells ... ";
   if (LC != NULL) {
-    Log() << Verbose(1) << "ERROR: Linked Cell list is already allocated, I do nothing." << endl;
+    eLog() << Verbose(1) << "Linked Cell list is already allocated, I do nothing." << endl;
     return;
   }
@@ -199,5 +199,5 @@
     status = status && ((n[i] >=0) && (n[i] < N[i]));
   if (!status)
-  eLog() << Verbose(0) << "ERROR: indices are out of bounds!" << endl;
+  eLog() << Verbose(1) << "indices are out of bounds!" << endl;
   return status;
 };
@@ -260,5 +260,5 @@
     return status;
   } else {
-    eLog() << Verbose(1) << "ERROR: Node at " << *Walker << " is out of bounds." << endl;
+    eLog() << Verbose(1) << "Node at " << *Walker << " is out of bounds." << endl;
     return false;
   }
Index: src/memoryusageobserver.cpp
===================================================================
--- src/memoryusageobserver.cpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/memoryusageobserver.cpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -88,5 +88,5 @@
 
   if (current == memoryUsers.end()) {
-    Log() << Verbose(0) << "WARNING: There is non-tracked memory to be freed. Pointer "
+    eLog() << Verbose(2) << "There is non-tracked memory to be freed. Pointer "
       << pointer << " is not registered by MemoryUsageObserver: ";
     if (msg != NULL)
Index: src/molecule.cpp
===================================================================
--- src/molecule.cpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/molecule.cpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -192,5 +192,5 @@
   BondRescale = TopOrigin->type->HBondDistance[TopBond->BondDegree-1];
   if (BondRescale == -1) {
-    eLog() << Verbose(3) << "ERROR: There is no typical hydrogen bond distance in replacing bond (" << TopOrigin->Name << "<->" << TopReplacement->Name << ") of degree " << TopBond->BondDegree << "!" << endl;
+    eLog() << Verbose(1) << "There is no typical hydrogen bond distance in replacing bond (" << TopOrigin->Name << "<->" << TopReplacement->Name << ") of degree " << TopBond->BondDegree << "!" << endl;
     return false;
     BondRescale = bondlength;
@@ -235,5 +235,5 @@
             SecondOtherAtom = (*Runner)->GetOtherAtom(TopOrigin);
           } else {
-            Log() << Verbose(3) << "WARNING: Detected more than four bonds for atom " << TopOrigin->Name;
+            eLog() << Verbose(2) << "Detected more than four bonds for atom " << TopOrigin->Name;
           }
         }
@@ -272,5 +272,5 @@
       bondangle = TopOrigin->type->HBondAngle[1];
       if (bondangle == -1) {
-        Log() << Verbose(3) << "ERROR: There is no typical hydrogen bond angle in replacing bond (" << TopOrigin->Name << "<->" << TopReplacement->Name << ") of degree " << TopBond->BondDegree << "!" << endl;
+        eLog() << Verbose(1) << "There is no typical hydrogen bond angle in replacing bond (" << TopOrigin->Name << "<->" << TopReplacement->Name << ") of degree " << TopBond->BondDegree << "!" << endl;
         return false;
         bondangle = 0;
@@ -394,5 +394,5 @@
       break;
     default:
-      eLog() << Verbose(0) << "ERROR: BondDegree does not state single, double or triple bond!" << endl;
+      eLog() << Verbose(1) << "BondDegree does not state single, double or triple bond!" << endl;
       AllWentWell = false;
       break;
@@ -445,5 +445,5 @@
     Walker->type = elemente->FindElement(shorthand);
     if (Walker->type == NULL) {
-      eLog() << Verbose(0) << "Could not parse the element at line: '" << line << "', setting to H.";
+      eLog() << Verbose(1) << "Could not parse the element at line: '" << line << "', setting to H.";
       Walker->type = elemente->FindElement(1);
     }
@@ -541,5 +541,5 @@
     add(Binder, last);
   } else {
-    eLog() << Verbose(1) << "ERROR: Could not add bond between " << atom1->Name << " and " << atom2->Name << " as one or both are not present in the molecule." << endl;
+    eLog() << Verbose(1) << "Could not add bond between " << atom1->Name << " and " << atom2->Name << " as one or both are not present in the molecule." << endl;
   }
   return Binder;
@@ -619,5 +619,5 @@
     AtomCount--;
   } else
-    eLog() << Verbose(0) << "ERROR: Atom " << pointer->Name << " is of element " << pointer->type->Z << " but the entry in the table of the molecule is 0!" << endl;
+    eLog() << Verbose(1) << "Atom " << pointer->Name << " is of element " << pointer->type->Z << " but the entry in the table of the molecule is 0!" << endl;
   if (ElementsInMolecule[pointer->type->Z] == 0)  // was last atom of this element?
     ElementCount--;
@@ -637,5 +637,5 @@
     ElementsInMolecule[pointer->type->Z]--; // decrease number of atom of this element
   else
-    eLog() << Verbose(0) << "ERROR: Atom " << pointer->Name << " is of element " << pointer->type->Z << " but the entry in the table of the molecule is 0!" << endl;
+    eLog() << Verbose(1) << "Atom " << pointer->Name << " is of element " << pointer->type->Z << " but the entry in the table of the molecule is 0!" << endl;
   if (ElementsInMolecule[pointer->type->Z] == 0)  // was last atom of this element?
     ElementCount--;
Index: src/molecule.hpp
===================================================================
--- src/molecule.hpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/molecule.hpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -106,4 +106,5 @@
 
   // re-definition of virtual functions from PointCloud
+  const char * const GetName() const;
   Vector *GetCenter() const ;
   TesselPoint *GetPoint() const ;
Index: src/molecule_dynamics.cpp
===================================================================
--- src/molecule_dynamics.cpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/molecule_dynamics.cpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -307,5 +307,5 @@
     if (Params.DoubleList[i] > 1) {
       eLog() << Verbose(0) << "Failed to create an injective PermutationMap!" << endl;
-      exit(1);
+      performCriticalExit();
     }
   Log() << Verbose(1) << "done." << endl;
@@ -428,10 +428,10 @@
             }
             if (Potential > Params.PenaltyConstants[2]) {
-              eLog() << Verbose(0) << "ERROR: The two-step permutation procedure did not maintain injectivity!" << endl;
+              eLog() << Verbose(1) << "The two-step permutation procedure did not maintain injectivity!" << endl;
               exit(255);
             }
             //Log() << Verbose(0) << endl;
           } else {
-            eLog() << Verbose(0) << "ERROR: " << *Runner << " was not the owner of " << *Sprinter << "!" << endl;
+            eLog() << Verbose(1) << *Runner << " was not the owner of " << *Sprinter << "!" << endl;
             exit(255);
           }
@@ -569,8 +569,10 @@
     if (!Force.ParseMatrix(file, 0,0,0)) {
       eLog() << Verbose(0) << "Could not parse Force Matrix file " << file << "." << endl;
+      performCriticalExit();
       return false;
     }
     if (Force.RowCounter[0] != AtomCount) {
       eLog() << Verbose(0) << "Mismatch between number of atoms in file " << Force.RowCounter[0] << " and in molecule " << AtomCount << "." << endl;
+      performCriticalExit();
       return false;
     }
Index: src/molecule_fragmentation.cpp
===================================================================
--- src/molecule_fragmentation.cpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/molecule_fragmentation.cpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -111,4 +111,5 @@
         if (!testGraphInsert.second) {
           eLog() << Verbose(0) << "KeySet file must be corrupt as there are two equal key sets therein!" << endl;
+          performCriticalExit();
         }
       }
@@ -211,4 +212,5 @@
   } else {
     eLog() << Verbose(0) << "Unable to open " << line << " for writing keysets!" << endl;
+    performCriticalExit();
     status = false;
   }
@@ -368,4 +370,5 @@
     } else {
       eLog() << Verbose(0) << "Atom No. " << (*runner).second.first << " was not found in this molecule." << endl;
+      performCriticalExit();
     }
   }
@@ -441,5 +444,5 @@
     // transmorph graph keyset list into indexed KeySetList
     if (GlobalKeySetList == NULL) {
-      Log() << Verbose(1) << "ERROR: Given global key set list (graph) is NULL!" << endl;
+      eLog() << Verbose(1) << "Given global key set list (graph) is NULL!" << endl;
       return false;
     }
@@ -449,5 +452,5 @@
     map<int, pair<double,int> > *AdaptiveCriteriaList = ScanAdaptiveFileIntoMap(path, *IndexKeySetList); // (Root No., (Value, Order)) !
     if (AdaptiveCriteriaList->empty()) {
-      eLog() << Verbose(0) << "Unable to parse file, incrementing all." << endl;
+      eLog() << Verbose(2) << "Unable to parse file, incrementing all." << endl;
       while (Walker->next != end) {
         Walker = Walker->next;
@@ -638,5 +641,5 @@
         MolecularWalker->Leaf->FragmentBOSSANOVA(FragmentList[FragmentCounter], RootStack[FragmentCounter], MinimumRingSize);
       } else {
-        eLog() << Verbose(0) << "Subgraph " << MolecularWalker << " has no atoms!" << endl;
+        eLog() << Verbose(1) << "Subgraph " << MolecularWalker << " has no atoms!" << endl;
       }
       FragmentCounter++;  // next fragment list
@@ -898,5 +901,5 @@
       }
     } else {
-      Log() << Verbose(0) << "ERROR: Son " << Runner->Name << " has father " << FatherOfRunner->Name << " but its entry in SonList is " << SonList[FatherOfRunner->nr] << "!" << endl;
+      eLog() << Verbose(1) << "Son " << Runner->Name << " has father " << FatherOfRunner->Name << " but its entry in SonList is " << SonList[FatherOfRunner->nr] << "!" << endl;
     }
     if ((LonelyFlag) && (Leaf->AtomCount > 1)) {
@@ -1133,5 +1136,5 @@
         Log() << Verbose(0) << endl;
         //if (!CheckForConnectedSubgraph(FragmentSearch->FragmentSet))
-          //Log() << Verbose(0) << "ERROR: The found fragment is not a connected subgraph!" << endl;
+          //eLog() << Verbose(1) << "The found fragment is not a connected subgraph!" << endl;
         InsertFragmentIntoGraph(FragmentSearch);
       }
Index: src/molecule_graph.cpp
===================================================================
--- src/molecule_graph.cpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/molecule_graph.cpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -926,8 +926,12 @@
         break; // breaking here will not cause error!
     }
-    if (i == vertex->ListOfBonds.size())
+    if (i == vertex->ListOfBonds.size()) {
       eLog() << Verbose(0) << "Error: All Component entries are already occupied!" << endl;
-  } else
+      performCriticalExit();
+    }
+  } else {
     eLog() << Verbose(0) << "Error: Given vertex is NULL!" << endl;
+    performCriticalExit();
+  }
 }
 ;
@@ -1114,4 +1118,5 @@
   if (ReferenceStack->IsEmpty()) {
     eLog() << Verbose(0) << "ReferenceStack is empty!" << endl;
+    performCriticalExit();
     return false;
   }
Index: src/molecule_pointcloud.cpp
===================================================================
--- src/molecule_pointcloud.cpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/molecule_pointcloud.cpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -13,4 +13,11 @@
 /************************************* Functions for class molecule *********************************/
 
+/** Returns a name for this point cloud, here the molecule's name.
+ * \return name of point cloud
+ */
+const char * const molecule::GetName() const
+{
+  return name;
+};
 
 /** Determine center of all atoms.
Index: src/moleculelist.cpp
===================================================================
--- src/moleculelist.cpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/moleculelist.cpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -311,5 +311,5 @@
   Tesselation *TesselStruct = NULL;
   if ((srcmol == NULL) || (mol == NULL)) {
-    Log() << Verbose(1) << "ERROR: Either fixed or variable molecule is given as NULL." << endl;
+    eLog() << Verbose(1) << "Either fixed or variable molecule is given as NULL." << endl;
     return false;
   }
@@ -319,5 +319,5 @@
   FindNonConvexBorder(mol, TesselStruct, (const LinkedCell *&)LCList, 4., NULL);
   if (TesselStruct == NULL) {
-    Log() << Verbose(1) << "ERROR: Could not tesselate the fixed molecule." << endl;
+    eLog() << Verbose(1) << "Could not tesselate the fixed molecule." << endl;
     return false;
   }
@@ -402,6 +402,6 @@
   input.open(line.c_str());
   if (input == NULL) {
-    eLog() << Verbose(0) << endl << "Unable to open " << line << ", is the directory correct?"
-        << endl;
+    eLog() << Verbose(0) << endl << "Unable to open " << line << ", is the directory correct?" << endl;
+    performCriticalExit();
     return false;
   }
@@ -442,4 +442,5 @@
     if (input == NULL) {
       eLog() << Verbose(0) << endl << "Unable to open " << line << ", is the directory correct?" << endl;
+      performCriticalExit();
       return false;
     }
@@ -643,6 +644,8 @@
     if (path != NULL)
       strcpy(PathBackup, path);
-    else
+    else {
       eLog() << Verbose(0) << "OutputConfigForListOfFragments: NULL default path obtained from config!" << endl;
+      performCriticalExit();
+    }
 
     // correct periodic
@@ -757,8 +760,15 @@
   // 4a. create array of molecules to fill
   const int MolCount = Subgraphs->next->Count();
+  char number[MAXSTRINGSIZE];
   molecule **molecules = Malloc<molecule *>(MolCount, "config::Load() - **molecules");
   for (int i=0;i<MolCount;i++) {
     molecules[i] = (molecule*) new molecule(mol->elemente);
     molecules[i]->ActiveFlag = true;
+    strncpy(molecules[i]->name, mol->name, MAXSTRINGSIZE);
+    if (MolCount > 1) {
+      sprintf(number, "-%d", i+1);
+      strncat(molecules[i]->name, number, MAXSTRINGSIZE - strlen(mol->name) - 1);
+    }
+    cout << "MolName is " << molecules[i]->name << endl;
     insert(molecules[i]);
   }
@@ -797,5 +807,5 @@
     }
   }
-  // 4d. we don't need to redo bonds, as they are connected subgraphs and still maintained their ListOfBonds, but we have to remove them from first..last list
+  // 4d. we don't need to redo bonds, as they are connected subgraphs and still maintain their ListOfBonds, but we have to remove them from first..last list
   bond *Binder = mol->first;
   while (mol->first->next != mol->last) {
Index: src/parser.cpp
===================================================================
--- src/parser.cpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/parser.cpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -159,4 +159,5 @@
   if (input == NULL) {
     eLog() << Verbose(0) << endl << "Unable to open " << name << ", is the directory correct?" << endl;
+    performCriticalExit();
     return false;
   }
@@ -179,6 +180,8 @@
   //Log() << Verbose(0) << line.str() << endl;
   //Log() << Verbose(0) << "ColumnCounter[" << MatrixNr << "]: " << ColumnCounter[MatrixNr] << "." << endl;
-  if (ColumnCounter[MatrixNr] == 0)
+  if (ColumnCounter[MatrixNr] == 0) {
     eLog() << Verbose(0) << "ColumnCounter[" << MatrixNr << "]: " << ColumnCounter[MatrixNr] << " from file " << name << ", this is probably an error!" << endl;
+    performCriticalExit();
+  }
   
   // scan rest for number of rows/lines
@@ -193,6 +196,8 @@
   }
   //Log() << Verbose(0) << "RowCounter[" << MatrixNr << "]: " << RowCounter[MatrixNr] << " from file " << name << "." << endl;
-  if (RowCounter[MatrixNr] == 0)
+  if (RowCounter[MatrixNr] == 0) {
     eLog() << Verbose(0) << "RowCounter[" << MatrixNr << "]: " << RowCounter[MatrixNr] << " from file " << name << ", this is probably an error!" << endl;
+    performCriticalExit();
+  }
 
   // allocate matrix if it's not zero dimension in one direction
@@ -226,5 +231,5 @@
     }
   } else {
-    eLog() << Verbose(0) << "ERROR: Matrix nr. " << MatrixNr << " has column and row count of (" << ColumnCounter[MatrixNr] << "," << RowCounter[MatrixNr] << "), could not allocate nor parse!" << endl; 
+    eLog() << Verbose(1) << "Matrix nr. " << MatrixNr << " has column and row count of (" << ColumnCounter[MatrixNr] << "," << RowCounter[MatrixNr] << "), could not allocate nor parse!" << endl; 
   }
   input.close();
@@ -428,4 +433,5 @@
               if (m > RowCounter[ KeySets.OrderSet[Order][CurrentFragment] ]) {
                 eLog() << Verbose(0) << "In fragment No. " << KeySets.OrderSet[Order][CurrentFragment]   << " current force index " << m << " is greater than " << RowCounter[ KeySets.OrderSet[Order][CurrentFragment] ] << "!" << endl;
+                performCriticalExit();
                 return false;
               }
@@ -471,4 +477,5 @@
     if (output == NULL) {
       eLog() << Verbose(0) << "Unable to open output energy file " << line.str() << "!" << endl;
+      performCriticalExit();
       return false;
     }
@@ -500,4 +507,5 @@
   if (output == NULL) {
     eLog() << Verbose(0) << "Unable to open output matrix file " << line.str() << "!" << endl;
+    performCriticalExit();
     return false;
   }
@@ -656,4 +664,5 @@
       if (j > RowCounter[MatrixCounter]) {
         eLog() << Verbose(0) << "Current force index " << j << " is greater than " << RowCounter[MatrixCounter] << "!" << endl;
+        performCriticalExit();
         return false;
       }
@@ -793,4 +802,5 @@
       if (j > RowCounter[MatrixCounter]) {
         eLog() << Verbose(0) << "Current hessian index " << j << " is greater than " << RowCounter[MatrixCounter] << ", where i=" << i << ", Order=" << Order << ", l=" << l << " and FragmentNr=" << FragmentNr << "!" << endl;
+        performCriticalExit();
         return false;
       }
@@ -800,4 +810,5 @@
           if (k > ColumnCounter[MatrixCounter]) {
             eLog() << Verbose(0) << "Current hessian index " << k << " is greater than " << ColumnCounter[MatrixCounter] << ", where m=" << m << ", j=" << j << ", i=" << i << ", Order=" << Order << ", l=" << l << " and FragmentNr=" << FragmentNr << "!" << endl;
+            performCriticalExit();
             return false;
           }
@@ -852,4 +863,5 @@
               if (m > RowCounter[ KeySets.OrderSet[Order][CurrentFragment] ]) {
                 eLog() << Verbose(0) << "In fragment No. " << KeySets.OrderSet[Order][CurrentFragment]   << " current row index " << m << " is greater than " << RowCounter[ KeySets.OrderSet[Order][CurrentFragment] ] << "!" << endl;
+                performCriticalExit();
                 return false;
               }
@@ -869,4 +881,5 @@
                   if (n > ColumnCounter[ KeySets.OrderSet[Order][CurrentFragment] ]) {
                     eLog() << Verbose(0) << "In fragment No. " << KeySets.OrderSet[Order][CurrentFragment]   << " current column index " << n << " is greater than " << ColumnCounter[ KeySets.OrderSet[Order][CurrentFragment] ] << "!" << endl;
+                    performCriticalExit();
                     return false;
                   }
Index: src/periodentafel.cpp
===================================================================
--- src/periodentafel.cpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/periodentafel.cpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -313,5 +313,5 @@
 
   if (!otherstatus)
-    eLog() << Verbose(0) << "WARNING: Something went wrong while parsing the other databases!" << endl;
+    eLog() << Verbose(2) << "Something went wrong while parsing the other databases!" << endl;
 
   return status;
Index: src/stackclass.hpp
===================================================================
--- src/stackclass.hpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/stackclass.hpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -72,5 +72,5 @@
     return true;
   } else {
-    eLog() << Verbose(0) << "ERROR: Stack is full, " << "Stack: CurrentLastEntry " << CurrentLastEntry<< "\tCurrentFirstEntry " << CurrentFirstEntry << "\tNextFreeField " << NextFreeField << "\tEntryCount " << EntryCount << "!" << endl;
+    eLog() << Verbose(1) << "Stack is full, " << "Stack: CurrentLastEntry " << CurrentLastEntry<< "\tCurrentFirstEntry " << CurrentFirstEntry << "\tNextFreeField " << NextFreeField << "\tEntryCount " << EntryCount << "!" << endl;
     return false;
   }
@@ -87,5 +87,5 @@
     Walker = StackList[CurrentFirstEntry];
     if (Walker == NULL)
-      eLog() << Verbose(0) << "ERROR: Stack's field is empty!" << endl;
+      eLog() << Verbose(1) << "Stack's field is empty!" << endl;
     StackList[CurrentFirstEntry] = NULL;
     if (CurrentFirstEntry != CurrentLastEntry) { // hasn't last item been popped as well?
@@ -96,5 +96,5 @@
     }
   } else
-    eLog() << Verbose(0) << "ERROR: Stack is empty!" << endl;
+    eLog() << Verbose(1) << "Stack is empty!" << endl;
   return Walker;
 };
@@ -111,10 +111,10 @@
     StackList[CurrentLastEntry] = NULL;
     if (Walker == NULL)
-      eLog() << Verbose(0) << "ERROR: Stack's field is empty!" << endl;
+      eLog() << Verbose(1) << "Stack's field is empty!" << endl;
     NextFreeField = CurrentLastEntry;
     if (CurrentLastEntry != CurrentFirstEntry)  // has there been more than one item on stack
       CurrentLastEntry = (CurrentLastEntry + (EntryCount-1)) % EntryCount; // step back from current free field to last (modulo does not work in -1, thus go EntryCount-1 instead)
   } else {
-    eLog() << Verbose(0) << "ERROR: Stack is empty!" << endl;
+    eLog() << Verbose(1) << "Stack is empty!" << endl;
   }
   return Walker;
@@ -151,5 +151,5 @@
     } while (i!=NextFreeField);
   else
-    eLog() << Verbose(0) << "ERROR: Stack is already empty!" << endl;
+    eLog() << Verbose(1) << "Stack is already empty!" << endl;
   if (found) {
     NextFreeField = CurrentLastEntry;
Index: src/tesselation.cpp
===================================================================
--- src/tesselation.cpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/tesselation.cpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -48,5 +48,5 @@
   //Log() << Verbose(5) << "Erasing point nr. " << Nr << "." << endl;
   if (!lines.empty())
-    eLog() << Verbose(0) << "WARNING: Memory Leak! I " << *this << " am still connected to some lines." << endl;
+    eLog() << Verbose(2) << "Memory Leak! I " << *this << " am still connected to some lines." << endl;
   node = NULL;
 };
@@ -153,5 +153,5 @@
   }
   if (!triangles.empty())
-    eLog() << Verbose(0) << "WARNING: Memory Leak! I " << *this << " am still connected to some triangles." << endl;
+    eLog() << Verbose(2) << "Memory Leak! I " << *this << " am still connected to some triangles." << endl;
 };
 
@@ -188,5 +188,5 @@
   // get the two triangles
   if (triangles.size() != 2) {
-    Log() << Verbose(1) << "ERROR: Baseline " << *this << " is connected to less than two triangles, Tesselation incomplete!" << endl;
+    eLog() << Verbose(1) << "Baseline " << *this << " is connected to less than two triangles, Tesselation incomplete!" << endl;
     return true;
   }
@@ -226,5 +226,5 @@
       i++;
     } else {
-      //Log() << Verbose(2) << "ERROR: I cannot find third node in triangle, something's wrong." << endl;
+      //eLog() << Verbose(1) << "I cannot find third node in triangle, something's wrong." << endl;
       return true;
     }
@@ -333,7 +333,6 @@
   if (Counter < 3)
     {
-      eLog() << Verbose(0) << "ERROR! We have a triangle with only two distinct endpoints!"
-          << endl;
-      //exit(1);
+      eLog() << Verbose(0) << "ERROR! We have a triangle with only two distinct endpoints!" << endl;
+      performCriticalExit();
     }
   Log() << Verbose(0) << "." << endl;
@@ -409,5 +408,5 @@
   } while (CrossPoint.NormSquared() < MYEPSILON);
   if (i==3) {
-    Log() << Verbose(1) << "ERROR: Could not find any cross points, something's utterly wrong here!" << endl;
+    eLog() << Verbose(1) << "Could not find any cross points, something's utterly wrong here!" << endl;
     exit(255);
   }
@@ -634,5 +633,5 @@
       runner->second = NULL;
     } else
-      eLog() << Verbose(1) << "ERROR: The triangle " << runner->first << " has already been free'd." << endl;
+      eLog() << Verbose(1) << "The triangle " << runner->first << " has already been free'd." << endl;
   }
   Log() << Verbose(1) << "This envelope was written to file " << TriangleFilesWritten << " times(s)." << endl;
@@ -1174,5 +1173,5 @@
             if (NewLines[j]->IsConnectedTo(BLS[0])) {
               if (n>2) {
-                Log() << Verbose(1) << "ERROR: " << BLS[0] << " connects to all of the new lines?!" << endl;
+                Log() << Verbose(1) << BLS[0] << " connects to all of the new lines?!" << endl;
                 return false;
               } else
@@ -1191,5 +1190,5 @@
       }
     } else { // something is wrong with FindClosestTriangleToPoint!
-      Log() << Verbose(1) << "ERROR: The closest triangle did not produce an intersection!" << endl;
+      eLog() << Verbose(1) << "The closest triangle did not produce an intersection!" << endl;
       return false;
     }
@@ -1243,4 +1242,18 @@
 }
 ;
+
+/** Sets point to a present Tesselation::PointsOnBoundary.
+ * Tesselation::TPS is set to the existing one or NULL if not found.
+ * @param Candidate point to set to
+ * @param n index for this point in Tesselation::TPS array
+ */
+void Tesselation::SetTesselationPoint(TesselPoint* Candidate, const int n) const
+{
+  PointMap::const_iterator FindPoint = PointsOnBoundary.find(Candidate->nr);
+  if (FindPoint != PointsOnBoundary.end())
+    TPS[n] = FindPoint->second;
+  else
+    TPS[n] = NULL;
+};
 
 /** Function tries to add line from current Points in BPS to BoundaryLineSet.
@@ -1365,5 +1378,5 @@
       triangle->lines[i] = NULL;  // free'd or not: disconnect
     } else
-      eLog() << Verbose(0) << "ERROR: This line " << i << " has already been free'd." << endl;
+      eLog() << Verbose(1) << "This line " << i << " has already been free'd." << endl;
   }
 
@@ -1418,8 +1431,8 @@
       line->endpoints[i] = NULL;  // free'd or not: disconnect
     } else
-      eLog() << Verbose(0) << "ERROR: Endpoint " << i << " has already been free'd." << endl;
+      eLog() << Verbose(1) << "Endpoint " << i << " has already been free'd." << endl;
   }
   if (!line->triangles.empty())
-    eLog() << Verbose(0) << "WARNING: Memory Leak! I " << *line << " am still connected to some triangles." << endl;
+    eLog() << Verbose(2) << "Memory Leak! I " << *line << " am still connected to some triangles." << endl;
 
   if (LinesOnBoundary.erase(line->Nr))
@@ -1451,5 +1464,6 @@
  *                 triangles exist which is the maximum for three points
  */
-int Tesselation::CheckPresenceOfTriangle(TesselPoint *Candidates[3]) {
+int Tesselation::CheckPresenceOfTriangle(TesselPoint *Candidates[3]) const
+{
   int adjacentTriangleCount = 0;
   class BoundaryPointSet *Points[3];
@@ -1458,5 +1472,5 @@
   // builds a triangle point set (Points) of the end points
   for (int i = 0; i < 3; i++) {
-    PointMap::iterator FindPoint = PointsOnBoundary.find(Candidates[i]->nr);
+    PointMap::const_iterator FindPoint = PointsOnBoundary.find(Candidates[i]->nr);
     if (FindPoint != PointsOnBoundary.end()) {
       Points[i] = FindPoint->second;
@@ -1471,9 +1485,9 @@
       for (int j = i; j < 3; j++) {
         if (Points[j] != NULL) {
-          LineMap::iterator FindLine = Points[i]->lines.find(Points[j]->node->nr);
+          LineMap::const_iterator FindLine = Points[i]->lines.find(Points[j]->node->nr);
           for (; (FindLine != Points[i]->lines.end()) && (FindLine->first == Points[j]->node->nr); FindLine++) {
             TriangleMap *triangles = &FindLine->second->triangles;
             Log() << Verbose(3) << "Current line is " << FindLine->first << ": " << *(FindLine->second) << " with triangles " << triangles << "." << endl;
-            for (TriangleMap::iterator FindTriangle = triangles->begin(); FindTriangle != triangles->end(); FindTriangle++) {
+            for (TriangleMap::const_iterator FindTriangle = triangles->begin(); FindTriangle != triangles->end(); FindTriangle++) {
               if (FindTriangle->second->IsPresentTupel(Points)) {
                 adjacentTriangleCount++;
@@ -1589,5 +1603,5 @@
           }
         } else {
-          eLog() << Verbose(0) << "ERROR: The current cell " << LC->n[0] << "," << LC->n[1] << "," << LC->n[2] << " is invalid!" << endl;
+          eLog() << Verbose(1) << "The current cell " << LC->n[0] << "," << LC->n[1] << "," << LC->n[2] << " is invalid!" << endl;
         }
       }
@@ -1700,4 +1714,147 @@
 };
 
+/** Checks for a given baseline and a third point candidate whether baselines of the found triangle don't have even better candidates.
+ * This is supposed to prevent early closing of the tesselation.
+ * \param *BaseRay baseline, i.e. not \a *OptCandidate
+ * \param *ThirdNode third point in triangle, not in BoundaryLineSet::endpoints
+ * \param ShortestAngle path length on this circle band for the current \a *ThirdNode
+ * \param RADIUS radius of sphere
+ * \param *LC LinkedCell structure
+ * \return true - there is a better candidate (smaller angle than \a ShortestAngle), false - no better TesselPoint candidate found
+ */
+bool Tesselation::HasOtherBaselineBetterCandidate(const BoundaryLineSet * const BaseRay, const TesselPoint * const ThirdNode, double ShortestAngle, double RADIUS, const LinkedCell * const LC) const
+{
+  bool result = false;
+  Vector CircleCenter;
+  Vector CirclePlaneNormal;
+  Vector OldSphereCenter;
+  Vector SearchDirection;
+  Vector helper;
+  TesselPoint *OtherOptCandidate = NULL;
+  double OtherShortestAngle = 2.*M_PI; // This will indicate the quadrant.
+  double radius, CircleRadius;
+  BoundaryLineSet *Line = NULL;
+  BoundaryTriangleSet *T = NULL;
+
+  Log() << Verbose(1) << "Begin of HasOtherBaselineBetterCandidate" << endl;
+
+  // check both other lines
+  PointMap::const_iterator FindPoint = PointsOnBoundary.find(ThirdNode->nr);
+  if (FindPoint != PointsOnBoundary.end()) {
+    for (int i=0;i<2;i++) {
+      LineMap::const_iterator FindLine = (FindPoint->second)->lines.find(BaseRay->endpoints[0]->node->nr);
+      if (FindLine != (FindPoint->second)->lines.end()) {
+        Line = FindLine->second;
+        Log() << Verbose(1) << "Found line " << *Line << "." << endl;
+        if (Line->triangles.size() == 1) {
+          T = Line->triangles.begin()->second;
+          // construct center of circle
+          CircleCenter.CopyVector(Line->endpoints[0]->node->node);
+          CircleCenter.AddVector(Line->endpoints[1]->node->node);
+          CircleCenter.Scale(0.5);
+
+          // construct normal vector of circle
+          CirclePlaneNormal.CopyVector(Line->endpoints[0]->node->node);
+          CirclePlaneNormal.SubtractVector(Line->endpoints[1]->node->node);
+
+          // calculate squared radius of circle
+          radius = CirclePlaneNormal.ScalarProduct(&CirclePlaneNormal);
+          if (radius/4. < RADIUS*RADIUS) {
+            CircleRadius = RADIUS*RADIUS - radius/4.;
+            CirclePlaneNormal.Normalize();
+            //Log() << Verbose(2) << "INFO: CircleCenter is at " << CircleCenter << ", CirclePlaneNormal is " << CirclePlaneNormal << " with circle radius " << sqrt(CircleRadius) << "." << endl;
+
+            // construct old center
+            GetCenterofCircumcircle(&OldSphereCenter, *T->endpoints[0]->node->node, *T->endpoints[1]->node->node, *T->endpoints[2]->node->node);
+            helper.CopyVector(&T->NormalVector);  // normal vector ensures that this is correct center of the two possible ones
+            radius = Line->endpoints[0]->node->node->DistanceSquared(&OldSphereCenter);
+            helper.Scale(sqrt(RADIUS*RADIUS - radius));
+            OldSphereCenter.AddVector(&helper);
+            OldSphereCenter.SubtractVector(&CircleCenter);
+            //Log() << Verbose(2) << "INFO: OldSphereCenter is at " << OldSphereCenter << "." << endl;
+
+            // construct SearchDirection
+            SearchDirection.MakeNormalVector(&T->NormalVector, &CirclePlaneNormal);
+            helper.CopyVector(Line->endpoints[0]->node->node);
+            helper.SubtractVector(ThirdNode->node);
+            if (helper.ScalarProduct(&SearchDirection) < -HULLEPSILON)// ohoh, SearchDirection points inwards!
+              SearchDirection.Scale(-1.);
+            SearchDirection.ProjectOntoPlane(&OldSphereCenter);
+            SearchDirection.Normalize();
+            Log() << Verbose(2) << "INFO: SearchDirection is " << SearchDirection << "." << endl;
+            if (fabs(OldSphereCenter.ScalarProduct(&SearchDirection)) > HULLEPSILON) {
+              // rotated the wrong way!
+              eLog() << Verbose(1) << "SearchDirection and RelativeOldSphereCenter are still not orthogonal!" << endl;
+            }
+
+            // add third point
+            CandidateList *OptCandidates = new CandidateList();
+            FindThirdPointForTesselation(T->NormalVector, SearchDirection, OldSphereCenter, Line, ThirdNode, OptCandidates, &OtherShortestAngle, RADIUS, LC);
+            for (CandidateList::iterator it = OptCandidates->begin(); it != OptCandidates->end(); ++it) {
+              if (((*it)->point == BaseRay->endpoints[0]->node) || ((*it)->point == BaseRay->endpoints[1]->node)) // skip if it's the same triangle than suggested
+                continue;
+              Log() << Verbose(1) << " Third point candidate is " << *(*it)->point
+              << " with circumsphere's center at " << (*it)->OptCenter << "." << endl;
+              Log() << Verbose(1) << " Baseline is " << *BaseRay << endl;
+
+              // check whether all edges of the new triangle still have space for one more triangle (i.e. TriangleCount <2)
+              TesselPoint *PointCandidates[3];
+              PointCandidates[0] = (*it)->point;
+              PointCandidates[1] = BaseRay->endpoints[0]->node;
+              PointCandidates[2] = BaseRay->endpoints[1]->node;
+              bool check=false;
+              int existentTrianglesCount = CheckPresenceOfTriangle(PointCandidates);
+              // If there is no triangle, add it regularly.
+              if (existentTrianglesCount == 0) {
+                SetTesselationPoint((*it)->point, 0);
+                SetTesselationPoint(BaseRay->endpoints[0]->node, 1);
+                SetTesselationPoint(BaseRay->endpoints[1]->node, 2);
+
+                if (CheckLineCriteriaForDegeneratedTriangle((const BoundaryPointSet ** const )TPS)) {
+                  OtherOptCandidate = (*it)->point;
+                  check = true;
+                }
+              } else if ((existentTrianglesCount >= 1) && (existentTrianglesCount <= 3)) { // If there is a planar region within the structure, we need this triangle a second time.
+                SetTesselationPoint((*it)->point, 0);
+                SetTesselationPoint(BaseRay->endpoints[0]->node, 1);
+                SetTesselationPoint(BaseRay->endpoints[1]->node, 2);
+
+                // We demand that at most one new degenerate line is created and that this line also already exists (which has to be the case due to existentTrianglesCount == 1)
+                // i.e. at least one of the three lines must be present with TriangleCount <= 1
+                if (CheckLineCriteriaForDegeneratedTriangle((const BoundaryPointSet ** const)TPS)) {
+                  OtherOptCandidate = (*it)->point;
+                  check = true;
+                }
+              }
+
+              if (check) {
+                if (ShortestAngle > OtherShortestAngle) {
+                  Log() << Verbose(1) << "There is a better candidate than " << *ThirdNode << " with " << ShortestAngle << " from baseline " << *Line << ": " << *OtherOptCandidate << " with " << OtherShortestAngle << "." << endl;
+                  result = true;
+                  break;
+                }
+              }
+            }
+            delete(OptCandidates);
+            if (result)
+              break;
+          } else {
+            Log() << Verbose(1) << "Circumcircle for base line " << *Line << " and base triangle " << T << " is too big!" << endl;
+          }
+        } else {
+          eLog() << Verbose(2) << "Baseline is connected to two triangles already?" << endl;
+        }
+      } else {
+        Log() << Verbose(2) << "No present baseline between " << BaseRay->endpoints[0] << " and candidate " << *ThirdNode << "." << endl;
+      }
+    }
+  } else {
+    eLog() << Verbose(1) << "Could not find the TesselPoint " << *ThirdNode << "." << endl;
+  }
+
+  Log() << Verbose(1) << "End of HasOtherBaselineBetterCandidate" << endl;
+
+  return result;
+};
 
 /** This function finds a triangle to a line, adjacent to an existing one.
@@ -1766,5 +1923,5 @@
     if (fabs(OldSphereCenter.ScalarProduct(&SearchDirection)) > HULLEPSILON) {
       // rotated the wrong way!
-      eLog() << Verbose(0) << "ERROR: SearchDirection and RelativeOldSphereCenter are still not orthogonal!" << endl;
+      eLog() << Verbose(1) << "SearchDirection and RelativeOldSphereCenter are still not orthogonal!" << endl;
     }
 
@@ -1777,12 +1934,11 @@
 
   if (OptCandidates->begin() == OptCandidates->end()) {
-    eLog() << Verbose(0) << "WARNING: Could not find a suitable candidate." << endl;
+    eLog() << Verbose(2) << "Could not find a suitable candidate." << endl;
     return false;
   }
   Log() << Verbose(1) << "Third Points are ";
   for (CandidateList::iterator it = OptCandidates->begin(); it != OptCandidates->end(); ++it) {
-    Log() << Verbose(0) << " " << *(*it)->point;
-  }
-  Log() << Verbose(0) << endl;
+    Log() << Verbose(1) << " " << *(*it)->point << endl;
+  }
 
   BoundaryLineSet *BaseRay = &Line;
@@ -1800,40 +1956,17 @@
 
     BTS = NULL;
-    // If there is no triangle, add it regularly.
-    if (existentTrianglesCount == 0) {
-      AddTesselationPoint((*it)->point, 0);
-      AddTesselationPoint(BaseRay->endpoints[0]->node, 1);
-      AddTesselationPoint(BaseRay->endpoints[1]->node, 2);
-
-      if (CheckLineCriteriaForDegeneratedTriangle((const BoundaryPointSet ** const )TPS)) {
-        AddTesselationLine(TPS[0], TPS[1], 0);
-        AddTesselationLine(TPS[0], TPS[2], 1);
-        AddTesselationLine(TPS[1], TPS[2], 2);
-
-        BTS = new class BoundaryTriangleSet(BLS, TrianglesOnBoundaryCount);
-        AddTesselationTriangle();
-        (*it)->OptCenter.Scale(-1.);
-        BTS->GetNormalVector((*it)->OptCenter);
-        (*it)->OptCenter.Scale(-1.);
-
-        Log() << Verbose(0) << "--> New triangle with " << *BTS << " and normal vector " << BTS->NormalVector
-          << " for this triangle ... " << endl;
-      //Log() << Verbose(1) << "We have "<< TrianglesOnBoundaryCount << " for line " << *BaseRay << "." << endl;
-      } else {
-        Log() << Verbose(1) << "WARNING: This triangle consisting of ";
-        Log() << Verbose(0) << *(*it)->point << ", ";
-        Log() << Verbose(0) << *BaseRay->endpoints[0]->node << " and ";
-        Log() << Verbose(0) << *BaseRay->endpoints[1]->node << " ";
-        Log() << Verbose(0) << "exists and is not added, as it does not seem helpful!" << endl;
-        result = false;
-      }
-    } else if ((existentTrianglesCount >= 1) && (existentTrianglesCount <= 3)) { // If there is a planar region within the structure, we need this triangle a second time.
+    // check for present edges and whether we reach better candidates from them
+    //if (HasOtherBaselineBetterCandidate(BaseRay, (*it)->point, ShortestAngle, RADIUS, LC) ) {
+    if (0) {
+      result = false;
+      break;
+    } else {
+      // If there is no triangle, add it regularly.
+      if (existentTrianglesCount == 0) {
         AddTesselationPoint((*it)->point, 0);
         AddTesselationPoint(BaseRay->endpoints[0]->node, 1);
         AddTesselationPoint(BaseRay->endpoints[1]->node, 2);
 
-        // We demand that at most one new degenerate line is created and that this line also already exists (which has to be the case due to existentTrianglesCount == 1)
-        // i.e. at least one of the three lines must be present with TriangleCount <= 1
-        if (CheckLineCriteriaForDegeneratedTriangle((const BoundaryPointSet ** const)TPS)) {
+        if (CheckLineCriteriaForDegeneratedTriangle((const BoundaryPointSet ** const )TPS)) {
           AddTesselationLine(TPS[0], TPS[1], 0);
           AddTesselationLine(TPS[0], TPS[2], 1);
@@ -1841,15 +1974,14 @@
 
           BTS = new class BoundaryTriangleSet(BLS, TrianglesOnBoundaryCount);
-          AddTesselationTriangle();  // add to global map
-
-          (*it)->OtherOptCenter.Scale(-1.);
-          BTS->GetNormalVector((*it)->OtherOptCenter);
-          (*it)->OtherOptCenter.Scale(-1.);
-
-          Log() << Verbose(0) << "--> WARNING: Special new triangle with " << *BTS << " and normal vector " << BTS->NormalVector
-          << " for this triangle ... " << endl;
-          Log() << Verbose(1) << "We have "<< BaseRay->triangles.size() << " for line " << BaseRay << "." << endl;
+          AddTesselationTriangle();
+          (*it)->OptCenter.Scale(-1.);
+          BTS->GetNormalVector((*it)->OptCenter);
+          (*it)->OptCenter.Scale(-1.);
+
+          Log() << Verbose(0) << "--> New triangle with " << *BTS << " and normal vector " << BTS->NormalVector
+            << " for this triangle ... " << endl;
+        //Log() << Verbose(1) << "We have "<< TrianglesOnBoundaryCount << " for line " << *BaseRay << "." << endl;
         } else {
-          Log() << Verbose(1) << "WARNING: This triangle consisting of ";
+          eLog() << Verbose(2) << "This triangle consisting of ";
           Log() << Verbose(0) << *(*it)->point << ", ";
           Log() << Verbose(0) << *BaseRay->endpoints[0]->node << " and ";
@@ -1858,11 +1990,37 @@
           result = false;
         }
-    } else {
-      Log() << Verbose(1) << "This triangle consisting of ";
-      Log() << Verbose(0) << *(*it)->point << ", ";
-      Log() << Verbose(0) << *BaseRay->endpoints[0]->node << " and ";
-      Log() << Verbose(0) << *BaseRay->endpoints[1]->node << " ";
-      Log() << Verbose(0) << "is invalid!" << endl;
-      result = false;
+      } else if ((existentTrianglesCount >= 1) && (existentTrianglesCount <= 3)) { // If there is a planar region within the structure, we need this triangle a second time.
+          AddTesselationPoint((*it)->point, 0);
+          AddTesselationPoint(BaseRay->endpoints[0]->node, 1);
+          AddTesselationPoint(BaseRay->endpoints[1]->node, 2);
+
+          // We demand that at most one new degenerate line is created and that this line also already exists (which has to be the case due to existentTrianglesCount == 1)
+          // i.e. at least one of the three lines must be present with TriangleCount <= 1
+          if (CheckLineCriteriaForDegeneratedTriangle((const BoundaryPointSet ** const)TPS)) {
+            AddTesselationLine(TPS[0], TPS[1], 0);
+            AddTesselationLine(TPS[0], TPS[2], 1);
+            AddTesselationLine(TPS[1], TPS[2], 2);
+
+            BTS = new class BoundaryTriangleSet(BLS, TrianglesOnBoundaryCount);
+            AddTesselationTriangle();  // add to global map
+
+            (*it)->OtherOptCenter.Scale(-1.);
+            BTS->GetNormalVector((*it)->OtherOptCenter);
+            (*it)->OtherOptCenter.Scale(-1.);
+
+            eLog() << Verbose(2) << "--> WARNING: Special new triangle with " << *BTS << " and normal vector " << BTS->NormalVector << " for this triangle ... " << endl;
+            Log() << Verbose(1) << "We have "<< BaseRay->triangles.size() << " for line " << BaseRay << "." << endl;
+          } else {
+            eLog() << Verbose(2) << "This triangle consisting of " << *(*it)->point << ", " << *BaseRay->endpoints[0]->node << " and " << *BaseRay->endpoints[1]->node << " " << "exists and is not added, as it does not seem helpful!" << endl;
+            result = false;
+          }
+      } else {
+        Log() << Verbose(1) << "This triangle consisting of ";
+        Log() << Verbose(0) << *(*it)->point << ", ";
+        Log() << Verbose(0) << *BaseRay->endpoints[0]->node << " and ";
+        Log() << Verbose(0) << *BaseRay->endpoints[1]->node << " ";
+        Log() << Verbose(0) << "is invalid!" << endl;
+        result = false;
+      }
     }
 
@@ -1870,5 +2028,5 @@
     BaseRay = BLS[0];
     if ((BTS != NULL) && (BTS->NormalVector.NormSquared() < MYEPSILON)) {
-      Log() << Verbose(1) << "CRITICAL: Triangle " << *BTS << " has zero normal vector!" << endl;
+      eLog() << Verbose(1) << "Triangle " << *BTS << " has zero normal vector!" << endl;
       exit(255);
     }
@@ -2011,5 +2169,5 @@
     BaseLineNormal.Zero();
     if (Base->triangles.size() < 2) {
-      Log() << Verbose(2) << "ERROR: Less than two triangles are attached to this baseline!" << endl;
+      eLog() << Verbose(1) << "Less than two triangles are attached to this baseline!" << endl;
       return 0.;
     }
@@ -2051,5 +2209,5 @@
   BaseLineNormal.Zero();
   if (Base->triangles.size() < 2) {
-    Log() << Verbose(2) << "ERROR: Less than two triangles are attached to this baseline!" << endl;
+    eLog() << Verbose(1) << "Less than two triangles are attached to this baseline!" << endl;
     return NULL;
   }
@@ -2087,15 +2245,15 @@
   // check whether everything is in place to create new lines and triangles
   if (i<4) {
-    Log() << Verbose(1) << "ERROR: We have not gathered enough baselines!" << endl;
+    eLog() << Verbose(1) << "We have not gathered enough baselines!" << endl;
     return NULL;
   }
   for (int j=0;j<4;j++)
     if (OldLines[j] == NULL) {
-      Log() << Verbose(1) << "ERROR: We have not gathered enough baselines!" << endl;
+      eLog() << Verbose(1) << "We have not gathered enough baselines!" << endl;
       return NULL;
     }
   for (int j=0;j<2;j++)
     if (OldPoints[j] == NULL) {
-      Log() << Verbose(1) << "ERROR: We have not gathered enough endpoints!" << endl;
+      eLog() << Verbose(1) << "We have not gathered enough endpoints!" << endl;
       return NULL;
     }
@@ -2173,20 +2331,14 @@
       N[i] = LC->n[i];
   } else {
-    eLog() << Verbose(0) << "ERROR: Point " << *a << " is not found in cell " << LC->index << "." << endl;
+    eLog() << Verbose(1) << "Point " << *a << " is not found in cell " << LC->index << "." << endl;
     return;
   }
   // then go through the current and all neighbouring cells and check the contained points for possible candidates
-  Log() << Verbose(3) << "LC Intervals from [";
-  for (int i=0;i<NDIM;i++) {
-  Log() << Verbose(0) << " " << N[i] << "<->" << LC->N[i];
-  }
-  Log() << Verbose(0) << "] :";
   for (int i=0;i<NDIM;i++) {
     Nlower[i] = ((N[i]-1) >= 0) ? N[i]-1 : 0;
     Nupper[i] = ((N[i]+1) < LC->N[i]) ? N[i]+1 : LC->N[i]-1;
-    Log() << Verbose(0) << " [" << Nlower[i] << "," << Nupper[i] << "] ";
-  }
-  Log() << Verbose(0) << endl;
-
+  }
+  Log() << Verbose(3) << "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] << "], " << endl;
 
   for (LC->n[0] = Nlower[0]; LC->n[0] <= Nupper[0]; LC->n[0]++)
@@ -2280,5 +2432,5 @@
  * @param *LC LinkedCell structure with neighbouring points
  */
-void Tesselation::FindThirdPointForTesselation(Vector NormalVector, Vector SearchDirection, Vector OldSphereCenter, class BoundaryLineSet *BaseLine, class TesselPoint  *ThirdNode, CandidateList* &candidates, double *ShortestAngle, const double RADIUS, const LinkedCell *LC)
+void Tesselation::FindThirdPointForTesselation(Vector &NormalVector, Vector &SearchDirection, Vector &OldSphereCenter, class BoundaryLineSet *BaseLine, const class TesselPoint  * const ThirdNode, CandidateList* &candidates, double *ShortestAngle, const double RADIUS, const LinkedCell *LC) const
 {
   Vector CircleCenter;  // center of the circle, i.e. of the band of sphere's centers
@@ -2318,5 +2470,5 @@
     // test whether old center is on the band's plane
     if (fabs(OldSphereCenter.ScalarProduct(&CirclePlaneNormal)) > HULLEPSILON) {
-      eLog() << Verbose(0) << "ERROR: Something's very wrong here: OldSphereCenter is not on the band's plane as desired by " << fabs(OldSphereCenter.ScalarProduct(&CirclePlaneNormal)) << "!" << endl;
+      eLog() << Verbose(1) << "Something's very wrong here: OldSphereCenter is not on the band's plane as desired by " << fabs(OldSphereCenter.ScalarProduct(&CirclePlaneNormal)) << "!" << endl;
       OldSphereCenter.ProjectOntoPlane(&CirclePlaneNormal);
     }
@@ -2328,5 +2480,5 @@
       //Log() << Verbose(2) << "INFO: SearchDirection is " << SearchDirection << "." << endl;
       if (fabs(OldSphereCenter.ScalarProduct(&SearchDirection)) > HULLEPSILON) {  // rotated the wrong way!
-        eLog() << Verbose(0) << "ERROR: SearchDirection and RelativeOldSphereCenter are not orthogonal!" << endl;
+        eLog() << Verbose(1) << "SearchDirection and RelativeOldSphereCenter are not orthogonal!" << endl;
       }
 
@@ -2337,5 +2489,5 @@
         //Log() << Verbose(2) << "INFO: Center cell is " << N[0] << ", " << N[1] << ", " << N[2] << " with No. " << LC->index << "." << endl;
       } else {
-        eLog() << Verbose(0) << "ERROR: Vector " << CircleCenter << " is outside of LinkedCell's bounding box." << endl;
+        eLog() << Verbose(1) << "Vector " << CircleCenter << " is outside of LinkedCell's bounding box." << endl;
         return;
       }
@@ -2442,5 +2594,5 @@
           }
     } else {
-      eLog() << Verbose(2) << "ERROR: The projected center of the old sphere has radius " << radius << " instead of " << CircleRadius << "." << endl;
+      eLog() << Verbose(1) << "The projected center of the old sphere has radius " << radius << " instead of " << CircleRadius << "." << endl;
     }
   } else {
@@ -2533,5 +2685,5 @@
         triangles->unique();
       } else {
-        Log() << Verbose(1) << "ERROR: I cannot find a boundary point to the tessel point " << *trianglePoints[0] << "." << endl;
+        eLog() << Verbose(1) << "I cannot find a boundary point to the tessel point " << *trianglePoints[0] << "." << endl;
         return NULL;
       }
@@ -2544,5 +2696,5 @@
       for (int i=0;i<3;i++) {
         if (trianglePoints[i] == NULL) {
-          Log() << Verbose(1) << "ERROR: IsInnerPoint encounters serious error, point " << i << " not found." << endl;
+          eLog() << Verbose(1) << "IsInnerPoint encounters serious error, point " << i << " not found." << endl;
         }
         //Log() << Verbose(2) << "List of triangle points:" << endl;
@@ -2563,5 +2715,5 @@
   
   if ((triangles == NULL) || (triangles->empty())) {
-    Log() << Verbose(0) << "ERROR: There is no nearest triangle. Please check the tesselation structure.";
+    eLog() << Verbose(1) << "There is no nearest triangle. Please check the tesselation structure.";
     delete(triangles);
     return NULL;
@@ -2597,5 +2749,5 @@
       Log() << Verbose(2) << "Normal Vector of this back side is " << result->NormalVector << "." << endl;
       if (Center.ScalarProduct(&result->NormalVector) < 0) {
-        Log() << Verbose(1) << "ERROR: Front and back side yield NormalVector in wrong direction!" << endl;
+        eLog() << Verbose(1) << "Front and back side yield NormalVector in wrong direction!" << endl;
       }
     }
@@ -2699,5 +2851,5 @@
 
   if (connectedPoints->size() == 0) { // if have not found any points
-    Log() << Verbose(1) << "ERROR: We have not found any connected points to " << *Point<< "." << endl;
+    eLog() << Verbose(1) << "We have not found any connected points to " << *Point<< "." << endl;
     return NULL;
   }
@@ -2822,5 +2974,5 @@
     ReferencePoint = PointRunner->second;
   } else {
-    Log() << Verbose(2) << "ERROR: GetPathOfConnectedPoints() could not find the BoundaryPoint belonging to " << *Point << "." << endl;
+    eLog() << Verbose(1) << "GetPathOfConnectedPoints() could not find the BoundaryPoint belonging to " << *Point << "." << endl;
     return NULL;
   }
@@ -2839,5 +2991,5 @@
       LineRunner = TouchedLine.find(runner->second);
       if (LineRunner == TouchedLine.end()) {
-        Log() << Verbose(2) << "ERROR: I could not find " << *runner->second << " in the touched list." << endl;
+        eLog() << Verbose(1) << "I could not find " << *runner->second << " in the touched list." << endl;
       } else if (!LineRunner->second) {
         LineRunner->second = true;
@@ -2869,5 +3021,5 @@
                 }
               } else {
-                Log() << Verbose(2) << "ERROR: I could not find " << *triangle << " in the touched list." << endl;
+                eLog() << Verbose(1) << "I could not find " << *triangle << " in the touched list." << endl;
                 triangle = NULL;
               }
@@ -2886,5 +3038,5 @@
           LineRunner = TouchedLine.find(CurrentLine);
           if (LineRunner == TouchedLine.end())
-            Log() << Verbose(2) << "ERROR: I could not find " << *CurrentLine << " in the touched list." << endl;
+            eLog() << Verbose(1) << "I could not find " << *CurrentLine << " in the touched list." << endl;
           else
             LineRunner->second = true;
@@ -2904,5 +3056,5 @@
     }
   } else {
-    Log() << Verbose(1) << "ERROR: There are no lines attached to " << *ReferencePoint << "." << endl;
+    eLog() << Verbose(1) << "There are no lines attached to " << *ReferencePoint << "." << endl;
   }
 
@@ -2982,5 +3134,5 @@
 
   if (Point == NULL) {
-    Log() << Verbose(1) << "ERROR: Point given is NULL." << endl;
+    eLog() << Verbose(1) << "Point given is NULL." << endl;
   } else {
     // go through its lines and insert all triangles
@@ -3014,5 +3166,5 @@
 
   if (point == NULL) {
-    Log() << Verbose(1) << "ERROR: Cannot remove the point " << point << ", it's NULL!" << endl;
+    eLog() << Verbose(1) << "Cannot remove the point " << point << ", it's NULL!" << endl;
     return 0.;
   } else
@@ -3024,5 +3176,5 @@
   // get list of connected points
   if (point->lines.empty()) {
-    Log() << Verbose(1) << "ERROR: Cannot remove the point " << *point << ", it's connected to no lines!" << endl;
+    eLog() << Verbose(1) << "Cannot remove the point " << *point << ", it's connected to no lines!" << endl;
     return 0.;
   }
@@ -3124,5 +3276,5 @@
         triangle = GetPresentTriangle(TriangleCandidates);
         if (triangle != NULL) {
-          Log() << Verbose(1) << "WARNING: New triangle already present, skipping!" << endl;
+          eLog() << Verbose(2) << "New triangle already present, skipping!" << endl;
           StartNode++;
           MiddleNode++;
@@ -3433,4 +3585,6 @@
   }
   delete(DegeneratedTriangles);
+  if (count > 0)
+    LastTriangle = NULL;
 
   Log() << Verbose(1) << "RemoveDegeneratedTriangles() removed " << count << " triangles:" << endl;
@@ -3462,5 +3616,5 @@
     NearestBoundaryPoint = PointRunner->second;
   } else {
-    Log() << Verbose(1) << "ERROR: I cannot find the boundary point." << endl;
+    eLog() << Verbose(1) << "I cannot find the boundary point." << endl;
     return;
   }
Index: src/tesselation.hpp
===================================================================
--- src/tesselation.hpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/tesselation.hpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -170,4 +170,5 @@
   virtual ~PointCloud();
 
+  virtual const char * const GetName() const { return "unknown"; };
   virtual Vector *GetCenter() const { return NULL; };
   virtual TesselPoint *GetPoint() const { return NULL; };
@@ -177,6 +178,6 @@
   virtual void GoToFirst() const {};
   virtual void GoToLast() const {};
-  virtual bool IsEmpty() const { return false; };
-  virtual bool IsEnd() const { return false; };
+  virtual bool IsEmpty() const { return true; };
+  virtual bool IsEnd() const { return true; };
 };
 
@@ -205,4 +206,5 @@
 
     void AddTesselationPoint(TesselPoint* Candidate, const int n);
+    void SetTesselationPoint(TesselPoint* Candidate, const int n) const;
     void AddTesselationLine(class BoundaryPointSet *a, class BoundaryPointSet *b, const int n);
     void AlwaysAddTesselationTriangleLine(class BoundaryPointSet *a, class BoundaryPointSet *b, const int n);
@@ -217,7 +219,7 @@
     void FindStartingTriangle(const double RADIUS, const LinkedCell *LC);
     void FindSecondPointForTesselation(class TesselPoint* a, Vector Oben, class TesselPoint*& OptCandidate, double Storage[3], double RADIUS, const LinkedCell *LC);
-    void FindThirdPointForTesselation(Vector NormalVector, Vector SearchDirection, Vector OldSphereCenter, class BoundaryLineSet *BaseLine, class TesselPoint *ThirdNode, CandidateList* &candidates, double *ShortestAngle, const double RADIUS, const LinkedCell *LC);
+    void FindThirdPointForTesselation(Vector &NormalVector, Vector &SearchDirection, Vector &OldSphereCenter, class BoundaryLineSet *BaseLine, const class TesselPoint * const ThirdNode, CandidateList* &candidates, double *ShortestAngle, const double RADIUS, const LinkedCell *LC) const;
     bool FindNextSuitableTriangle(BoundaryLineSet &Line, BoundaryTriangleSet &T, const double& RADIUS, const LinkedCell *LC);
-    int CheckPresenceOfTriangle(class TesselPoint *Candidates[3]);
+    int CheckPresenceOfTriangle(class TesselPoint *Candidates[3]) const;
     class BoundaryTriangleSet * GetPresentTriangle(TesselPoint *Candidates[3]);
 
@@ -281,7 +283,9 @@
 
   private:
-    class BoundaryPointSet *TPS[3]; //this is a Storage for pointers to triangle points, this and BPS[2] needed due to AddLine restrictions
+    mutable class BoundaryPointSet *TPS[3]; //this is a Storage for pointers to triangle points, this and BPS[2] needed due to AddLine restrictions
 
     mutable PointMap::const_iterator InternalPointer;
+
+    bool HasOtherBaselineBetterCandidate(const BoundaryLineSet * const BaseRay, const TesselPoint * const OptCandidate, double ShortestAngle, double RADIUS, const LinkedCell * const LC) const;
 };
 
Index: src/tesselationhelpers.cpp
===================================================================
--- src/tesselationhelpers.cpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/tesselationhelpers.cpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -77,5 +77,5 @@
 
   if (fabs(m11) < MYEPSILON)
-    eLog() << Verbose(0) << "ERROR: three points are colinear." << endl;
+    eLog() << Verbose(1) << "three points are colinear." << endl;
 
   center->x[0] =  0.5 * m12/ m11;
@@ -84,5 +84,5 @@
 
   if (fabs(a.Distance(center) - RADIUS) > MYEPSILON)
-    eLog() << Verbose(0) << "ERROR: The given center is further way by " << fabs(a.Distance(center) - RADIUS) << " from a than RADIUS." << endl;
+    eLog() << Verbose(1) << "The given center is further way by " << fabs(a.Distance(center) - RADIUS) << " from a than RADIUS." << endl;
 
   gsl_matrix_free(A);
@@ -187,6 +187,7 @@
   gamma = M_PI - SideA.Angle(&SideB);
   //Log() << Verbose(3) << "INFO: alpha = " << alpha/M_PI*180. << ", beta = " << beta/M_PI*180. << ", gamma = " << gamma/M_PI*180. << "." << endl;
-  if (fabs(M_PI - alpha - beta - gamma) > HULLEPSILON)
-    eLog() << Verbose(0) << "GetCenterofCircumcircle: Sum of angles " << (alpha+beta+gamma)/M_PI*180. << " > 180 degrees by " << fabs(M_PI - alpha - beta - gamma)/M_PI*180. << "!" << endl;
+  if (fabs(M_PI - alpha - beta - gamma) > HULLEPSILON) {
+    eLog() << Verbose(1) << "GetCenterofCircumcircle: Sum of angles " << (alpha+beta+gamma)/M_PI*180. << " > 180 degrees by " << fabs(M_PI - alpha - beta - gamma)/M_PI*180. << "!" << endl;
+  }
 
   Center->Zero();
@@ -224,5 +225,5 @@
   // test whether new center is on the parameter circle's plane
   if (fabs(helper.ScalarProduct(&CirclePlaneNormal)) > HULLEPSILON) {
-    eLog() << Verbose(0) << "ERROR: Something's very wrong here: NewSphereCenter is not on the band's plane as desired by " <<fabs(helper.ScalarProduct(&CirclePlaneNormal))  << "!" << endl;
+    eLog() << Verbose(1) << "Something's very wrong here: NewSphereCenter is not on the band's plane as desired by " <<fabs(helper.ScalarProduct(&CirclePlaneNormal))  << "!" << endl;
     helper.ProjectOntoPlane(&CirclePlaneNormal);
   }
@@ -230,5 +231,5 @@
   // test whether the new center vector has length of CircleRadius
   if (fabs(radius - CircleRadius) > HULLEPSILON)
-    eLog() << Verbose(1) << "ERROR: The projected center of the new sphere has radius " << radius << " instead of " << CircleRadius << "." << endl;
+    eLog() << Verbose(1) << "The projected center of the new sphere has radius " << radius << " instead of " << CircleRadius << "." << endl;
   alpha = helper.Angle(&OldSphereCenter);
   // make the angle unique by checking the halfplanes/search direction
@@ -461,5 +462,8 @@
   for (int i=0;i<3;i++)
     for (int j=i+1; j<3; j++) {
-      if (nodes[i]->lines.find(nodes[j]->node->nr) != nodes[i]->lines.end()) {  // there already is a line
+      if (nodes[i] == NULL) {
+        Log() << Verbose(1) << "Node nr. " << i << " is not yet present." << endl;
+        result = true;
+      } else if (nodes[i]->lines.find(nodes[j]->node->nr) != nodes[i]->lines.end()) {  // there already is a line
         LineMap::const_iterator FindLine;
         pair<LineMap::const_iterator,LineMap::const_iterator> FindPair;
@@ -491,5 +495,5 @@
   Vector BaseLineVector, OrthogonalVector, helper;
   if (candidate1->BaseLine != candidate2->BaseLine) {  // sanity check
-    Log() << Verbose(0) << "ERROR: sortCandidates was called for two different baselines: " << candidate1->BaseLine << " and " << candidate2->BaseLine << "." << endl;
+    eLog() << Verbose(1) << "sortCandidates was called for two different baselines: " << candidate1->BaseLine << " and " << candidate2->BaseLine << "." << endl;
     //return false;
     exit(1);
@@ -574,5 +578,5 @@
           }
         } else {
-          eLog() << Verbose(0) << "ERROR: The current cell " << LC->n[0] << "," << LC->n[1] << ","
+          eLog() << Verbose(1) << "The current cell " << LC->n[0] << "," << LC->n[1] << ","
             << LC->n[2] << " is invalid!" << endl;
         }
@@ -630,5 +634,5 @@
           }
         } else {
-          eLog() << Verbose(0) << "ERROR: The current cell " << LC->n[0] << "," << LC->n[1] << ","
+          eLog() << Verbose(1) << "The current cell " << LC->n[0] << "," << LC->n[1] << ","
             << LC->n[2] << " is invalid!" << endl;
         }
@@ -738,5 +742,5 @@
     }
   } else {
-    eLog() << Verbose(0) << "ERROR: Given vrmlfile is " << vrmlfile << "." << endl;
+    eLog() << Verbose(1) << "Given vrmlfile is " << vrmlfile << "." << endl;
   }
   delete(center);
@@ -752,18 +756,21 @@
 {
   Vector helper;
-  // include the current position of the virtual sphere in the temporary raster3d file
-  Vector *center = cloud->GetCenter();
-  // make the circumsphere's center absolute again
-  helper.CopyVector(Tess->LastTriangle->endpoints[0]->node->node);
-  helper.AddVector(Tess->LastTriangle->endpoints[1]->node->node);
-  helper.AddVector(Tess->LastTriangle->endpoints[2]->node->node);
-  helper.Scale(1./3.);
-  helper.SubtractVector(center);
-  // and add to file plus translucency object
-  *rasterfile << "# current virtual sphere\n";
-  *rasterfile << "8\n  25.0    0.6     -1.0 -1.0 -1.0     0.2        0 0 0 0\n";
-  *rasterfile << "2\n  " << helper.x[0] << " " << helper.x[1] << " " << helper.x[2] << "\t" << 5. << "\t1 0 0\n";
-  *rasterfile << "9\n  terminating special property\n";
-  delete(center);
+
+  if (Tess->LastTriangle != NULL) {
+    // include the current position of the virtual sphere in the temporary raster3d file
+    Vector *center = cloud->GetCenter();
+    // make the circumsphere's center absolute again
+    helper.CopyVector(Tess->LastTriangle->endpoints[0]->node->node);
+    helper.AddVector(Tess->LastTriangle->endpoints[1]->node->node);
+    helper.AddVector(Tess->LastTriangle->endpoints[2]->node->node);
+    helper.Scale(1./3.);
+    helper.SubtractVector(center);
+    // and add to file plus translucency object
+    *rasterfile << "# current virtual sphere\n";
+    *rasterfile << "8\n  25.0    0.6     -1.0 -1.0 -1.0     0.2        0 0 0 0\n";
+    *rasterfile << "2\n  " << helper.x[0] << " " << helper.x[1] << " " << helper.x[2] << "\t" << 5. << "\t1 0 0\n";
+    *rasterfile << "9\n  terminating special property\n";
+    delete(center);
+  }
 };
 
@@ -808,5 +815,5 @@
     *rasterfile << "9\n#  terminating special property\n";
   } else {
-    eLog() << Verbose(0) << "ERROR: Given rasterfile is " << rasterfile << "." << endl;
+    eLog() << Verbose(1) << "Given rasterfile is " << rasterfile << "." << endl;
   }
   IncludeSphereinRaster3D(rasterfile, Tess, cloud);
@@ -825,7 +832,12 @@
     *tecplot << "TITLE = \"3D CONVEX SHELL\"" << endl;
     *tecplot << "VARIABLES = \"X\" \"Y\" \"Z\" \"U\"" << endl;
-    *tecplot << "ZONE T=\"" << N << "-";
-    for (int i=0;i<3;i++)
-      *tecplot << (i==0 ? "" : "_") << TesselStruct->LastTriangle->endpoints[i]->node->Name;
+    *tecplot << "ZONE T=\"";
+    if (N < 0) {
+      *tecplot << cloud->GetName();
+    } else {
+      *tecplot << N << "-";
+      for (int i=0;i<3;i++)
+        *tecplot << (i==0 ? "" : "_") << TesselStruct->LastTriangle->endpoints[i]->node->Name;
+    }
     *tecplot << "\", N=" << TesselStruct->PointsOnBoundary.size() << ", E=" << TesselStruct->TrianglesOnBoundary.size() << ", DATAPACKING=POINT, ZONETYPE=FETRIANGLE" << endl;
     int i=0;
Index: src/vector.cpp
===================================================================
--- src/vector.cpp	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ src/vector.cpp	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -229,5 +229,5 @@
   factor = Direction.ScalarProduct(PlaneNormal);
   if (factor < MYEPSILON) { // Uniqueness: line parallel to plane?
-    Log() << Verbose(2) << "WARNING: Line is parallel to plane, no intersection." << endl;
+    eLog() << Verbose(2) << "Line is parallel to plane, no intersection." << endl;
     return false;
   }
@@ -253,5 +253,5 @@
     return true;
   } else {
-    Log() << Verbose(2) << "WARNING: Intersection point " << *this << " is not on plane." << endl;
+    eLog() << Verbose(2) << "Intersection point " << *this << " is not on plane." << endl;
     return false;
   }
@@ -747,5 +747,5 @@
       x[i] = C.x[i];
   } else {
-    eLog() << Verbose(0) << "ERROR: inverse of matrix does not exists: det A = " << detA << "." << endl;
+    eLog() << Verbose(1) << "inverse of matrix does not exists: det A = " << detA << "." << endl;
   }
 };
@@ -799,5 +799,5 @@
   x2.SubtractVector(y2);
   if ((fabs(x1.Norm()) < MYEPSILON) || (fabs(x2.Norm()) < MYEPSILON) || (fabs(x1.Angle(&x2)) < MYEPSILON)) {
-    Log() << Verbose(4) << "WARNING: Given vectors are linear dependent." << endl;
+    eLog() << Verbose(2) << "Given vectors are linear dependent." << endl;
     return false;
   }
@@ -833,5 +833,5 @@
   Zero();
   if ((fabs(x1.Norm()) < MYEPSILON) || (fabs(x2.Norm()) < MYEPSILON) || (fabs(x1.Angle(&x2)) < MYEPSILON)) {
-    Log() << Verbose(4) << "WARNING: Given vectors are linear dependent." << endl;
+    eLog() << Verbose(2) << "Given vectors are linear dependent." << endl;
     return false;
   }
Index: tests/Tesselations/1_2-dimethoxyethane/NonConvexEnvelope-1_2-dimethoxyethane.dat
===================================================================
--- tests/Tesselations/1_2-dimethoxyethane/NonConvexEnvelope-1_2-dimethoxyethane.dat	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ tests/Tesselations/1_2-dimethoxyethane/NonConvexEnvelope-1_2-dimethoxyethane.dat	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -1,5 +1,5 @@
 TITLE = "3D CONVEX SHELL"
 VARIABLES = "X" "Y" "Z" "U"
-ZONE T="0- H10_ H15_ H16", N=12, E=20, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
+ZONE T="1_2-dimethoxyethane", N=12, E=20, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
 9.6489 7.0567 6.6101 2
 6.8975 7.0567 5.9709 2
Index: tests/Tesselations/1_2-dimethylbenzene/NonConvexEnvelope-1_2-dimethylbenzene.dat
===================================================================
--- tests/Tesselations/1_2-dimethylbenzene/NonConvexEnvelope-1_2-dimethylbenzene.dat	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ tests/Tesselations/1_2-dimethylbenzene/NonConvexEnvelope-1_2-dimethylbenzene.dat	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -1,5 +1,5 @@
 TITLE = "3D CONVEX SHELL"
 VARIABLES = "X" "Y" "Z" "U"
-ZONE T="0- C07_ C08_ H09", N=14, E=25, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
+ZONE T="1_2-dimethylbenzene", N=14, E=25, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
 8.3296 6.7712 6.0321 3
 8.3296 8.1534 6.0305 3
Index: tests/Tesselations/2-methylcyclohexanone/NonConvexEnvelope-2-methylcyclohexanone.dat
===================================================================
--- tests/Tesselations/2-methylcyclohexanone/NonConvexEnvelope-2-methylcyclohexanone.dat	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ tests/Tesselations/2-methylcyclohexanone/NonConvexEnvelope-2-methylcyclohexanone.dat	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -1,5 +1,5 @@
 TITLE = "3D CONVEX SHELL"
 VARIABLES = "X" "Y" "Z" "U"
-ZONE T="0- H15_ H18_ H19", N=13, E=22, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
+ZONE T="2-methylcyclohexanone", N=13, E=22, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
 9.2731 9.0957 6.144 1
 10.8392 7.1885 6.8694 0
Index: tests/Tesselations/C16_0-Torus/NonConvexEnvelope-C16_0-Torus.dat
===================================================================
--- tests/Tesselations/C16_0-Torus/NonConvexEnvelope-C16_0-Torus.dat	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ tests/Tesselations/C16_0-Torus/NonConvexEnvelope-C16_0-Torus.dat	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -1,5 +1,5 @@
 TITLE = "3D CONVEX SHELL"
 VARIABLES = "X" "Y" "Z" "U"
-ZONE T="0- C818_ C1839_ C1904", N=8208, E=16416, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
+ZONE T="C16_0-Torus", N=8208, E=16416, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
 57.0669 28.4968 10.0318 2
 53.7124 30.5841 10.0363 2
Index: tests/Tesselations/Makefile.am
===================================================================
--- tests/Tesselations/Makefile.am	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ tests/Tesselations/Makefile.am	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -2,4 +2,5 @@
 1_2-dimethylbenzene.test \
 2-methylcyclohexanone.test \
+benzene.test \
 cholesterol.test \
 cluster.test \
Index: tests/Tesselations/N_N-dimethylacetamide/NonConvexEnvelope-N_N-dimethylacetamide.dat
===================================================================
--- tests/Tesselations/N_N-dimethylacetamide/NonConvexEnvelope-N_N-dimethylacetamide.dat	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ tests/Tesselations/N_N-dimethylacetamide/NonConvexEnvelope-N_N-dimethylacetamide.dat	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -1,5 +1,5 @@
 TITLE = "3D CONVEX SHELL"
 VARIABLES = "X" "Y" "Z" "U"
-ZONE T="0- C03_ O06_ H12", N=11, E=18, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
+ZONE T="N_N-dimethylacetamide", N=11, E=18, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
 6.4232 7.1074 8.3151 3
 6.5832 7.8674 9.2351 1
Index: tests/Tesselations/benzene.test
===================================================================
--- tests/Tesselations/benzene.test	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
+++ tests/Tesselations/benzene.test	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -0,0 +1,8 @@
+#! /bin/sh
+
+# Test a simple simulation: 
+
+. ./defs || exit 1
+set -e
+
+Tesselation_run 0 4.
Index: tests/Tesselations/benzene/benzene.xyz
===================================================================
--- tests/Tesselations/benzene/benzene.xyz	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
+++ tests/Tesselations/benzene/benzene.xyz	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -0,0 +1,14 @@
+12
+Benzene molecule
+H   -1.6271    0.0000   -0.0007
+C   -0.5471    0.0001   -0.0015
+C    0.1541    1.2073    0.0011
+C    0.1544   -1.2075    0.0010
+C    1.5338    1.2000    0.0007
+C    1.5336   -1.2001    0.0007
+C    2.2223    0.0002   -0.0021
+H   -0.3822    2.1448    0.0029
+H   -0.3819   -2.1449    0.0036
+H    2.0775    2.1332    0.0024
+H    2.0774   -2.1333    0.0026
+H    3.3023    0.0002   -0.0027
Index: tests/Tesselations/cholesterol/NonConvexEnvelope-cholesterol.dat
===================================================================
--- tests/Tesselations/cholesterol/NonConvexEnvelope-cholesterol.dat	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ tests/Tesselations/cholesterol/NonConvexEnvelope-cholesterol.dat	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -1,5 +1,5 @@
 TITLE = "3D CONVEX SHELL"
 VARIABLES = "X" "Y" "Z" "U"
-ZONE T="0- H49_ H50_ H51", N=44, E=86, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
+ZONE T="cholesterol", N=44, E=86, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
 19.4519 9.7871 8.0824 1
 12.9054 5.0485 9.284 1
Index: tests/Tesselations/cluster/NonConvexEnvelope-cluster.dat
===================================================================
--- tests/Tesselations/cluster/NonConvexEnvelope-cluster.dat	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ tests/Tesselations/cluster/NonConvexEnvelope-cluster.dat	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -1,5 +1,5 @@
 TITLE = "3D CONVEX SHELL"
 VARIABLES = "X" "Y" "Z" "U"
-ZONE T="0- O4864_ O4865_ O5836", N=434, E=782, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
+ZONE T="cluster", N=434, E=782, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
 59.3961 67.9193 74.1709 1
 60.8097 66.4885 71.9891 1
Index: tests/Tesselations/cycloheptane/NonConvexEnvelope-cycloheptane.dat
===================================================================
--- tests/Tesselations/cycloheptane/NonConvexEnvelope-cycloheptane.dat	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ tests/Tesselations/cycloheptane/NonConvexEnvelope-cycloheptane.dat	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -1,5 +1,5 @@
 TITLE = "3D CONVEX SHELL"
 VARIABLES = "X" "Y" "Z" "U"
-ZONE T="0- H08_ H12_ H13", N=14, E=24, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
+ZONE T="cycloheptane", N=14, E=24, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
 5 8.6586 6.1486 0
 5.8635 8.4046 7.6783 0
Index: tests/Tesselations/dimethyl_bromomalonate/NonConvexEnvelope-dimethyl_bromomalonate.dat
===================================================================
--- tests/Tesselations/dimethyl_bromomalonate/NonConvexEnvelope-dimethyl_bromomalonate.dat	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ tests/Tesselations/dimethyl_bromomalonate/NonConvexEnvelope-dimethyl_bromomalonate.dat	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -1,5 +1,5 @@
 TITLE = "3D CONVEX SHELL"
 VARIABLES = "X" "Y" "Z" "U"
-ZONE T="0- H12_ H13_ H14", N=12, E=20, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
+ZONE T="dimethyl_bromomalonate", N=12, E=20, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
 8.1538 5 6.6665 1
 6.8226 7.583 6.9158 4
Index: tests/Tesselations/glucose/NonConvexEnvelope-glucose.dat
===================================================================
--- tests/Tesselations/glucose/NonConvexEnvelope-glucose.dat	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ tests/Tesselations/glucose/NonConvexEnvelope-glucose.dat	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -1,5 +1,5 @@
 TITLE = "3D CONVEX SHELL"
 VARIABLES = "X" "Y" "Z" "U"
-ZONE T="0- C09_ O12_ H17", N=19, E=34, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
+ZONE T="glucose", N=19, E=34, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
 9.5866 5 7.577 1
 8.4149 7.4116 8.4659 1
Index: tests/Tesselations/heptan/NonConvexEnvelope-heptan.dat
===================================================================
--- tests/Tesselations/heptan/NonConvexEnvelope-heptan.dat	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ tests/Tesselations/heptan/NonConvexEnvelope-heptan.dat	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -1,5 +1,5 @@
 TITLE = "3D CONVEX SHELL"
 VARIABLES = "X" "Y" "Z" "U"
-ZONE T="0- H07_ H08_ H11", N=16, E=28, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
+ZONE T="heptan", N=16, E=28, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
 9.6377 5 6.78 0
 9.6377 5 5 0
Index: tests/Tesselations/isoleucine/NonConvexEnvelope-isoleucine.dat
===================================================================
--- tests/Tesselations/isoleucine/NonConvexEnvelope-isoleucine.dat	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ tests/Tesselations/isoleucine/NonConvexEnvelope-isoleucine.dat	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -1,5 +1,5 @@
 TITLE = "3D CONVEX SHELL"
 VARIABLES = "X" "Y" "Z" "U"
-ZONE T="0- H20_ H21_ H22", N=17, E=30, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
+ZONE T="isoleucine", N=17, E=30, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
 10.8909 7.216 6.6663 5
 9.4763 5.271 6.3191 1
Index: tests/Tesselations/neohexane/NonConvexEnvelope-neohexane.dat
===================================================================
--- tests/Tesselations/neohexane/NonConvexEnvelope-neohexane.dat	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ tests/Tesselations/neohexane/NonConvexEnvelope-neohexane.dat	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -1,5 +1,5 @@
 TITLE = "3D CONVEX SHELL"
 VARIABLES = "X" "Y" "Z" "U"
-ZONE T="0- H10_ H15_ H20", N=14, E=24, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
+ZONE T="neohexane", N=14, E=24, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
 7.1525 6.2503 8.0589 1
 7.1525 8.0303 8.0578 1
Index: tests/Tesselations/proline/NonConvexEnvelope-proline.dat
===================================================================
--- tests/Tesselations/proline/NonConvexEnvelope-proline.dat	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ tests/Tesselations/proline/NonConvexEnvelope-proline.dat	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -1,5 +1,5 @@
 TITLE = "3D CONVEX SHELL"
 VARIABLES = "X" "Y" "Z" "U"
-ZONE T="0- H10_ H13_ H17", N=13, E=22, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
+ZONE T="proline", N=13, E=22, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
 9.2095 7.1856 6.6953 4
 9.3187 7.948 7.6262 2
Index: tests/Tesselations/putrescine/NonConvexEnvelope-putrescine.dat
===================================================================
--- tests/Tesselations/putrescine/NonConvexEnvelope-putrescine.dat	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ tests/Tesselations/putrescine/NonConvexEnvelope-putrescine.dat	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -1,5 +1,5 @@
 TITLE = "3D CONVEX SHELL"
 VARIABLES = "X" "Y" "Z" "U"
-ZONE T="0- N06_ H17_ H18", N=14, E=24, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
+ZONE T="putrescine", N=14, E=24, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
 10.8857 5.9511 6.2964 1
 5.5257 8.9311 6.4164 1
Index: tests/Tesselations/round_cluster/NonConvexEnvelope-round_cluster.dat
===================================================================
--- tests/Tesselations/round_cluster/NonConvexEnvelope-round_cluster.dat	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ tests/Tesselations/round_cluster/NonConvexEnvelope-round_cluster.dat	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -1,5 +1,5 @@
 TITLE = "3D CONVEX SHELL"
 VARIABLES = "X" "Y" "Z" "U"
-ZONE T="0- O633_ O960_ O1013", N=467, E=930, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
+ZONE T="round_cluster", N=467, E=930, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
 41.4883 31.1464 29.9646 2
 35.0153 37.6127 31.0313 4
Index: tests/Tesselations/tartaric_acid/NonConvexEnvelope-tartaric_acid.dat
===================================================================
--- tests/Tesselations/tartaric_acid/NonConvexEnvelope-tartaric_acid.dat	(revision 3a0b3890298aafb5853dc67311a7ba037e2e94b4)
+++ tests/Tesselations/tartaric_acid/NonConvexEnvelope-tartaric_acid.dat	(revision ebbd3d3e47035ead60a750b80c7f05742071fd11)
@@ -1,5 +1,5 @@
 TITLE = "3D CONVEX SHELL"
 VARIABLES = "X" "Y" "Z" "U"
-ZONE T="0- C05_ O09_ H12", N=14, E=24, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
+ZONE T="tartaric_acid", N=14, E=24, DATAPACKING=POINT, ZONETYPE=FETRIANGLE
 10.156 6.9295 6.2926 4
 8.5078 5.7627 5 1
