Index: src/analysis_bonds.cpp
===================================================================
--- src/analysis_bonds.cpp	(revision 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/analysis_bonds.cpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -37,5 +37,5 @@
   }
   if (((int)Mean % 2) != 0)
-    eLog() << Verbose(1) << "Something is wrong with the bond structure, the number of bonds is not even!" << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Something is wrong with the bond structure, the number of bonds is not even!" << endl);
   Mean /= (double)AtomCount;
 };
Index: src/analysis_correlation.cpp
===================================================================
--- src/analysis_correlation.cpp	(revision 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/analysis_correlation.cpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -36,5 +36,5 @@
 
   if (molecules->ListOfMolecules.empty()) {
-    eLog() << Verbose(1) <<"No molecule given." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) <<"No molecule given." << endl);
     return outmap;
   }
@@ -42,5 +42,5 @@
   for (MoleculeList::const_iterator MolWalker = molecules->ListOfMolecules.begin(); MolWalker != molecules->ListOfMolecules.end(); MolWalker++)
     if ((*MolWalker)->ActiveFlag) {
-      eLog() << Verbose(2) << "Current molecule is " << *MolWalker << "." << endl;
+      DoeLog(2) && (eLog()<< Verbose(2) << "Current molecule is " << *MolWalker << "." << endl);
       atom *Walker = (*MolWalker)->start;
       while (Walker->next != (*MolWalker)->end) {
@@ -92,5 +92,5 @@
 
   if (molecules->ListOfMolecules.empty()) {
-    eLog() << Verbose(1) <<"No molecule given." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) <<"No molecule given." << endl);
     return outmap;
   }
@@ -100,5 +100,5 @@
       double * FullMatrix = ReturnFullMatrixforSymmetric(World::get()->cell_size);
       double * FullInverseMatrix = InverseMatrix(FullMatrix);
-      eLog() << Verbose(2) << "Current molecule is " << *MolWalker << "." << endl;
+      DoeLog(2) && (eLog()<< Verbose(2) << "Current molecule is " << *MolWalker << "." << endl);
       atom *Walker = (*MolWalker)->start;
       while (Walker->next != (*MolWalker)->end) {
@@ -257,5 +257,5 @@
 
   if ((Surface == NULL) || (LC == NULL) || (molecules->ListOfMolecules.empty())) {
-    eLog() << Verbose(1) <<"No Tesselation, no LinkedCell or no molecule given." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) <<"No Tesselation, no LinkedCell or no molecule given." << endl);
     return outmap;
   }
@@ -333,6 +333,7 @@
                 checkX.AddVector(&periodicX);
                 checkX.MatrixMultiplication(FullMatrix);
-                triangle = Surface->FindClosestTriangleToVector(&checkX, LC);
-                distance = Surface->GetDistanceSquaredToTriangle(checkX, triangle);
+                TriangleIntersectionList Intersections(&checkX,Surface,LC);
+                distance = Intersections.GetSmallestDistance();
+                triangle = Intersections.GetClosestTriangle();
                 if ((ShortestDistance == -1.) || (distance < ShortestDistance)) {
                   ShortestDistance = distance;
@@ -341,5 +342,4 @@
               }
           // insert
-          ShortestDistance = sqrt(ShortestDistance);
           outmap->insert ( pair<double, pair<atom *, BoundaryTriangleSet*> >(ShortestDistance, pair<atom *, BoundaryTriangleSet*> (Walker, ShortestTriangle) ) );
           //Log() << Verbose(1) << "INFO: Inserting " << Walker << " with distance " << ShortestDistance << " to " << *ShortestTriangle << "." << endl;
Index: src/analysis_correlation.hpp
===================================================================
--- src/analysis_correlation.hpp	(revision 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/analysis_correlation.hpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -71,5 +71,5 @@
 
   if (map == NULL) {
-    eLog() << Verbose(0) << "Nothing to min/max, map is NULL!" << endl;
+    DoeLog(0) && (eLog()<< Verbose(0) << "Nothing to min/max, map is NULL!" << endl);
     performCriticalExit();
     return;
@@ -109,5 +109,5 @@
 
   if (map == NULL) {
-    eLog() << Verbose(0) << "Nothing to bin, is NULL!" << endl;
+    DoeLog(0) && (eLog()<< Verbose(0) << "Nothing to bin, is NULL!" << endl);
     performCriticalExit();
     return outmap;
Index: src/analyzer.cpp
===================================================================
--- src/analyzer.cpp	(revision 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/analyzer.cpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -96,5 +96,5 @@
   if (!Hcorrection.ParseFragmentMatrix(argv[1], "", HCORRECTIONSUFFIX,0,0)) {
     NoHCorrection = true;
-    eLog() << Verbose(2) << "No HCorrection file found, skipping these." << endl;
+    DoeLog(2) && (eLog()<< Verbose(2) << "No HCorrection file found, skipping these." << endl);
   }
   
@@ -102,9 +102,9 @@
   if (!Hessian.ParseFragmentMatrix(argv[1], dir, HessianSuffix,0,0)) {
     NoHessian = true;
-    eLog() << Verbose(2) << "No Hessian file found, skipping these." << endl;
+    DoeLog(2) && (eLog()<< Verbose(2) << "No Hessian file found, skipping these." << endl);
   }
   if (!Time.ParseFragmentMatrix(argv[1], dir, TimeSuffix, 10,1)) {
     NoTime = true;
-    eLog() << Verbose(2) << "No speed file found, skipping these." << endl;
+    DoeLog(2) && (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 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/atom_bondedparticle.cpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -86,8 +86,8 @@
       status = true;
     } else {
-      eLog() << Verbose(1) << *Binder << " does not contain " << *this << "." << endl;
+      DoeLog(1) && (eLog()<< Verbose(1) << *Binder << " does not contain " << *this << "." << endl);
     }
   } else {
-    eLog() << Verbose(1) << "Binder is " << Binder << "." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Binder is " << Binder << "." << endl);
   }
   return status;
@@ -105,8 +105,8 @@
       status = true;
     } else {
-      eLog() << Verbose(1) << *Binder << " does not contain " << *this << "." << endl;
+      DoeLog(1) && (eLog()<< Verbose(1) << *Binder << " does not contain " << *this << "." << endl);
     }
   } else {
-    eLog() << Verbose(1) << "Binder is " << Binder << "." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Binder is " << Binder << "." << endl);
   }
   return status;
@@ -150,5 +150,5 @@
       //Log() << Verbose(2) << "Increased bond degree for bond " << *CandidateBond << "." << endl;
     } else {
-      eLog() << Verbose(2) << "Could not find correct degree for atom " << *this << "." << endl;
+      DoeLog(2) && (eLog()<< Verbose(2) << "Could not find correct degree for atom " << *this << "." << endl);
       FalseBondDegree++;
     }
Index: src/bond.cpp
===================================================================
--- src/bond.cpp	(revision 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/bond.cpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -63,5 +63,5 @@
   if(rightatom == Atom) 
     return leftatom;
-  eLog() << Verbose(1) << "Bond " << *this << " does not contain atom " << *Atom << "!" << endl;
+  DoeLog(1) && (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(1) << "Bond " << this << " was already marked black!." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Bond " << this << " was already marked black!." << endl);
     return false;
   } else {
Index: src/bondgraph.cpp
===================================================================
--- src/bondgraph.cpp	(revision 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/bondgraph.cpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -58,5 +58,5 @@
     Log() << Verbose(1) << "Parsing bond length matrix successful." << endl;
   } else {
-    eLog() << Verbose(1) << "Parsing bond length matrix failed." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Parsing bond length matrix failed." << endl);
   }
 
@@ -159,5 +159,5 @@
 {
   if (BondLengthMatrix == NULL) {// safety measure if no matrix has been parsed yet
-    eLog() << Verbose(2) << "BondLengthMatrixMinMaxDistance() called without having parsed the bond length matrix yet!" << endl;
+    DoeLog(2) && (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 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/boundary.cpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -342,5 +342,5 @@
     for (Boundaries::iterator runner = BoundaryPoints[axis].begin(); runner != BoundaryPoints[axis].end(); runner++)
         if (!TesselStruct->AddBoundaryPoint(runner->second.second, 0))
-          eLog() << Verbose(2) << "Point " << *(runner->second.second) << " is already present!" << endl;
+          DoeLog(2) && (eLog()<< Verbose(2) << "Point " << *(runner->second.second) << " is already present!" << endl);
 
   Log() << Verbose(0) << "I found " << TesselStruct->PointsOnBoundaryCount << " points on the convex boundary." << endl;
@@ -362,5 +362,5 @@
   // 3c. check whether all atoms lay inside the boundary, if not, add to boundary points, segment triangle into three with the new point
   if (!TesselStruct->InsertStraddlingPoints(mol, LCList))
-    eLog() << Verbose(1) << "Insertion of straddling points failed!" << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Insertion of straddling points failed!" << endl);
 
   Log() << Verbose(0) << "I created " << TesselStruct->TrianglesOnBoundary.size() << " intermediate triangles with " << TesselStruct->LinesOnBoundary.size() << " lines and " << TesselStruct->PointsOnBoundary.size() << " points." << endl;
@@ -401,5 +401,5 @@
         // flip the line
         if (TesselStruct->PickFarthestofTwoBaselines(line) == 0.)
-          eLog() << Verbose(1) << "Correction of concave baselines failed!" << endl;
+          DoeLog(1) && (eLog()<< Verbose(1) << "Correction of concave baselines failed!" << endl);
         else {
           TesselStruct->FlipBaseline(line);
@@ -456,5 +456,5 @@
 
   if ((TesselStruct == NULL) || (TesselStruct->PointsOnBoundary.empty())) {
-    eLog() << Verbose(1) << "TesselStruct is empty." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "TesselStruct is empty." << endl);
     return false;
   }
@@ -521,5 +521,5 @@
   // check whether there is something to work on
   if (TesselStruct == NULL) {
-    eLog() << Verbose(1) << "TesselStruct is empty!" << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "TesselStruct is empty!" << endl);
     return volume;
   }
@@ -748,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(1) << "the containing box already has a greater volume than the envisaged cell volume!" << endl;
+    DoeLog(1) && (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++)
Index: src/builder.cpp
===================================================================
--- src/builder.cpp	(revision 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/builder.cpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -85,22 +85,22 @@
   bool valid;
 
-  Log() << Verbose(0) << "===========ADD ATOM============================" << endl;
-  Log() << Verbose(0) << " a - state absolute coordinates of atom" << endl;
-  Log() << Verbose(0) << " b - state relative coordinates of atom wrt to reference point" << endl;
-  Log() << Verbose(0) << " c - state relative coordinates of atom wrt to already placed atom" << endl;
-  Log() << Verbose(0) << " d - state two atoms, two angles and a distance" << endl;
-  Log() << Verbose(0) << " e - least square distance position to a set of atoms" << endl;
-  Log() << Verbose(0) << "all else - go back" << endl;
-  Log() << Verbose(0) << "===============================================" << endl;
-  Log() << Verbose(0) << "Note: Specifiy angles in degrees not multiples of Pi!" << endl;
-  Log() << Verbose(0) << "INPUT: ";
+  cout << Verbose(0) << "===========ADD ATOM============================" << endl;
+  cout << Verbose(0) << " a - state absolute coordinates of atom" << endl;
+  cout << Verbose(0) << " b - state relative coordinates of atom wrt to reference point" << endl;
+  cout << Verbose(0) << " c - state relative coordinates of atom wrt to already placed atom" << endl;
+  cout << Verbose(0) << " d - state two atoms, two angles and a distance" << endl;
+  cout << Verbose(0) << " e - least square distance position to a set of atoms" << endl;
+  cout << Verbose(0) << "all else - go back" << endl;
+  cout << Verbose(0) << "===============================================" << endl;
+  cout << Verbose(0) << "Note: Specifiy angles in degrees not multiples of Pi!" << endl;
+  cout << Verbose(0) << "INPUT: ";
   cin >> choice;
 
   switch (choice) {
     default:
-      eLog() << Verbose(2) << "Not a valid choice." << endl;
+      DoeLog(2) && (eLog()<< Verbose(2) << "Not a valid choice." << endl);
       break;
       case 'a': // absolute coordinates of atom
-        Log() << Verbose(0) << "Enter absolute coordinates." << endl;
+        cout << Verbose(0) << "Enter absolute coordinates." << endl;
         first = new atom;
         first->x.AskPosition(World::get()->cell_size, false);
@@ -113,11 +113,11 @@
         valid = true;
         do {
-          if (!valid) eLog() << Verbose(2) << "Resulting position out of cell." << endl;
-          Log() << Verbose(0) << "Enter reference coordinates." << endl;
+          if (!valid) DoeLog(2) && (eLog()<< Verbose(2) << "Resulting position out of cell." << endl);
+          cout << Verbose(0) << "Enter reference coordinates." << endl;
           x.AskPosition(World::get()->cell_size, true);
-          Log() << Verbose(0) << "Enter relative coordinates." << endl;
+          cout << Verbose(0) << "Enter relative coordinates." << endl;
           first->x.AskPosition(World::get()->cell_size, false);
           first->x.AddVector((const Vector *)&x);
-          Log() << Verbose(0) << "\n";
+          cout << Verbose(0) << "\n";
         } while (!(valid = mol->CheckBounds((const Vector *)&first->x)));
         first->type = periode->AskElement();  // give type
@@ -129,5 +129,5 @@
         valid = true;
         do {
-          if (!valid) eLog() << Verbose(2) << "Resulting position out of cell." << endl;
+          if (!valid) DoeLog(2) && (eLog()<< Verbose(2) << "Resulting position out of cell." << endl);
           second = mol->AskAtom("Enter atom number: ");
           Log() << Verbose(0) << "Enter relative coordinates." << endl;
@@ -146,7 +146,7 @@
         do {
           if (!valid) {
-            eLog() << Verbose(2) << "Resulting coordinates out of cell - " << first->x << endl;
+            DoeLog(2) && (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;
+          cout << Verbose(0) << "First, we need two atoms, the first atom is the central, while the second is the outer one." << endl;
           second = mol->AskAtom("Enter central atom: ");
           third = mol->AskAtom("Enter second atom (specifying the axis for first angle): ");
@@ -159,5 +159,5 @@
           c *= M_PI/180.;
           bound(&c, -M_PI, M_PI);
-          Log() << Verbose(0) << "radius: " << a << "\t phi: " << b*180./M_PI << "\t theta: " << c*180./M_PI << endl;
+          cout << Verbose(0) << "radius: " << a << "\t phi: " << b*180./M_PI << "\t theta: " << c*180./M_PI << endl;
 /*
           second->Output(1,1,(ofstream *)&cout);
@@ -171,5 +171,5 @@
 
           if (!z.SolveSystem(&x,&y,&n, b, c, a)) {
-            Log() << Verbose(0) << "Failure solving self-dependent linear system!" << endl;
+         coutg() << Verbose(0) << "Failure solving self-dependent linear system!" << endl;
             continue;
           }
@@ -248,7 +248,7 @@
           atoms[i] = NULL;
         int i=0, j=0;
-        Log() << Verbose(0) << "Now we need at least three molecules.\n";
+        cout << Verbose(0) << "Now we need at least three molecules.\n";
         do {
-          Log() << Verbose(0) << "Enter " << i+1 << "th atom: ";
+          cout << Verbose(0) << "Enter " << i+1 << "th atom: ";
           cin >> j;
           if (j != -1) {
@@ -265,5 +265,5 @@
         } else {
           delete first;
-          Log() << Verbose(0) << "Please enter at least two vectors!\n";
+          cout << Verbose(0) << "Please enter at least two vectors!\n";
         }
         break;
@@ -279,30 +279,30 @@
   char choice;  // menu choice char
 
-  Log() << Verbose(0) << "===========CENTER ATOMS=========================" << endl;
-  Log() << Verbose(0) << " a - on origin" << endl;
-  Log() << Verbose(0) << " b - on center of gravity" << endl;
-  Log() << Verbose(0) << " c - within box with additional boundary" << endl;
-  Log() << Verbose(0) << " d - within given simulation box" << endl;
-  Log() << Verbose(0) << "all else - go back" << endl;
-  Log() << Verbose(0) << "===============================================" << endl;
-  Log() << Verbose(0) << "INPUT: ";
+  cout << Verbose(0) << "===========CENTER ATOMS=========================" << endl;
+  cout << Verbose(0) << " a - on origin" << endl;
+  cout << Verbose(0) << " b - on center of gravity" << endl;
+  cout << Verbose(0) << " c - within box with additional boundary" << endl;
+  cout << Verbose(0) << " d - within given simulation box" << endl;
+  cout << Verbose(0) << "all else - go back" << endl;
+  cout << Verbose(0) << "===============================================" << endl;
+  cout << Verbose(0) << "INPUT: ";
   cin >> choice;
 
   switch (choice) {
     default:
-      Log() << Verbose(0) << "Not a valid choice." << endl;
+      cout << Verbose(0) << "Not a valid choice." << endl;
       break;
     case 'a':
-      Log() << Verbose(0) << "Centering atoms in config file on origin." << endl;
+      cout << Verbose(0) << "Centering atoms in config file on origin." << endl;
       mol->CenterOrigin();
       break;
     case 'b':
-      Log() << Verbose(0) << "Centering atoms in config file on center of gravity." << endl;
+      cout << Verbose(0) << "Centering atoms in config file on center of gravity." << endl;
       mol->CenterPeriodic();
       break;
     case 'c':
-      Log() << Verbose(0) << "Centering atoms in config file within given additional boundary." << endl;
+      cout << Verbose(0) << "Centering atoms in config file within given additional boundary." << endl;
       for (int i=0;i<NDIM;i++) {
-        Log() << Verbose(0) << "Enter axis " << i << " boundary: ";
+        cout << Verbose(0) << "Enter axis " << i << " boundary: ";
         cin >> y.x[i];
       }
@@ -315,7 +315,7 @@
       break;
     case 'd':
-      Log() << Verbose(1) << "Centering atoms in config file within given simulation box." << endl;
+      cout << Verbose(1) << "Centering atoms in config file within given simulation box." << endl;
       for (int i=0;i<NDIM;i++) {
-        Log() << Verbose(0) << "Enter axis " << i << " boundary: ";
+        cout << Verbose(0) << "Enter axis " << i << " boundary: ";
         cin >> x.x[i];
       }
@@ -338,12 +338,12 @@
   char choice;  // menu choice char
 
-  Log() << Verbose(0) << "===========ALIGN ATOMS=========================" << endl;
-  Log() << Verbose(0) << " a - state three atoms defining align plane" << endl;
-  Log() << Verbose(0) << " b - state alignment vector" << endl;
-  Log() << Verbose(0) << " c - state two atoms in alignment direction" << endl;
-  Log() << Verbose(0) << " d - align automatically by least square fit" << endl;
-  Log() << Verbose(0) << "all else - go back" << endl;
-  Log() << Verbose(0) << "===============================================" << endl;
-  Log() << Verbose(0) << "INPUT: ";
+  cout << Verbose(0) << "===========ALIGN ATOMS=========================" << endl;
+  cout << Verbose(0) << " a - state three atoms defining align plane" << endl;
+  cout << Verbose(0) << " b - state alignment vector" << endl;
+  cout << Verbose(0) << " c - state two atoms in alignment direction" << endl;
+  cout << Verbose(0) << " d - align automatically by least square fit" << endl;
+  cout << Verbose(0) << "all else - go back" << endl;
+  cout << Verbose(0) << "===============================================" << endl;
+  cout << Verbose(0) << "INPUT: ";
   cin >> choice;
 
@@ -358,5 +358,5 @@
       break;
     case 'b': // normal vector of mirror plane
-      Log() << Verbose(0) << "Enter normal vector of mirror plane." << endl;
+      cout << Verbose(0) << "Enter normal vector of mirror plane." << endl;
       n.AskPosition(World::get()->cell_size,0);
       n.Normalize();
@@ -378,5 +378,5 @@
         fscanf(stdin, "%3s", shorthand);
       } while ((param.type = periode->FindElement(shorthand)) == NULL);
-      Log() << Verbose(0) << "Element is " << param.type->name << endl;
+      cout << Verbose(0) << "Element is " << param.type->name << endl;
       mol->GetAlignvector(&param);
       for (int i=NDIM;i--;) {
@@ -385,5 +385,5 @@
       }
       gsl_vector_free(param.x);
-      Log() << Verbose(0) << "Offset vector: ";
+      cout << Verbose(0) << "Offset vector: ";
       x.Output();
       Log() << Verbose(0) << endl;
@@ -674,5 +674,5 @@
   Log() << Verbose(0) << "===============================================" << endl;
   if (molecules->NumberOfActiveMolecules() > 1)
-    eLog() << Verbose(2) << "There is more than one molecule active! Atoms will be added to each." << endl;
+    DoeLog(2) && (eLog()<< Verbose(2) << "There is more than one molecule active! Atoms will be added to each." << endl);
   Log() << Verbose(0) << "INPUT: ";
   cin >> choice;
@@ -830,5 +830,5 @@
   Log() << Verbose(0) << "===============================================" << endl;
   if (molecules->NumberOfActiveMolecules() > 1)
-    eLog() << Verbose(2) << "There is more than one molecule active! Atoms will be added to each." << endl;
+    DoeLog(2) && (eLog()<< Verbose(2) << "There is more than one molecule active! Atoms will be added to each." << endl);
   Log() << Verbose(0) << "INPUT: ";
   cin >> choice;
@@ -863,5 +863,5 @@
           }
           if (count != j)
-            eLog() << Verbose(1) << "AtomCount " << count << " is not equal to number of atoms in molecule " << j << "!" << endl;
+            DoeLog(1) && (eLog()<< Verbose(1) << "AtomCount " << count << " is not equal to number of atoms in molecule " << j << "!" << endl);
           x.Zero();
           y.Zero();
@@ -1208,5 +1208,5 @@
     mol = (molecules->ListOfMolecules.front())->CopyMolecule();
   else {
-    eLog() << Verbose(0) << "I don't have anything to test on ... ";
+    DoeLog(0) && (eLog()<< Verbose(0) << "I don't have anything to test on ... ");
     performCriticalExit();
     return;
@@ -1289,5 +1289,5 @@
 
   if (!strcmp(configuration->configpath, configuration->GetDefaultPath())) {
-    eLog() << Verbose(2) << "config is found under different path then stated in config file::defaultpath!" << endl;
+    DoeLog(2) && (eLog()<< Verbose(2) << "config is found under different path then stated in config file::defaultpath!" << endl);
   }
 
@@ -1393,5 +1393,5 @@
 
   if (!strcmp(configuration->configpath, configuration->GetDefaultPath())) {
-    eLog() << Verbose(2) << "config is found under different path then stated in config file::defaultpath!" << endl;
+    DoeLog(2) && (eLog()<< Verbose(2) << "config is found under different path then stated in config file::defaultpath!" << endl);
   }
 
@@ -1496,7 +1496,24 @@
             return (1);
             break;
+          case 'B':
+            if (ExitFlag == 0) ExitFlag = 1;
+            if ((argptr+5 >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) || (!IsValidNumber(argv[argptr+3])) || (!IsValidNumber(argv[argptr+4])) || (!IsValidNumber(argv[argptr+5])) ) {
+              ExitFlag = 255;
+              DoeLog(0) && (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;
+              j = -1;
+              Log() << Verbose(1) << "Centering atoms in config file within given simulation box." << endl;
+              double * const cell_size = World::get()->cell_size;
+              for (int i=0;i<6;i++) {
+                cell_size[i] = atof(argv[argptr+i]);
+              }
+              argptr+=6;
+            }
+            break;
           case 'e':
             if ((argptr >= argc) || (argv[argptr][0] == '-')) {
-              eLog() << Verbose(0) << "Not enough or invalid arguments for specifying element db: -e <db file>" << endl;
+              DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments for specifying element db: -e <db file>" << endl);
               performCriticalExit();
             } else {
@@ -1508,5 +1525,5 @@
           case 'g':
             if ((argptr >= argc) || (argv[argptr][0] == '-')) {
-              eLog() << Verbose(0) << "Not enough or invalid arguments for specifying bond length table: -g <table file>" << endl;
+              DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments for specifying bond length table: -g <table file>" << endl);
               performCriticalExit();
             } else {
@@ -1605,5 +1622,5 @@
          Log() << Verbose(0) << "Bond length table loaded successfully." << endl;
        } else {
-         eLog() << Verbose(1) << "Bond length table loading failed." << endl;
+         DoeLog(1) && (eLog()<< Verbose(1) << "Bond length table loading failed." << endl);
        }
      }
@@ -1621,5 +1638,5 @@
               if ((argptr >= argc) || (argv[argptr][0] == '-')) {
                 ExitFlag = 255;
-                eLog() << Verbose(0) << "Not enough arguments for parsing: -p <xyz file>" << endl;
+                DoeLog(0) && (eLog()<< Verbose(0) << "Not enough arguments for parsing: -p <xyz file>" << endl);
                 performCriticalExit();
               } else {
@@ -1638,5 +1655,5 @@
               if ((argptr >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) || (!IsValidNumber(argv[argptr+3]))) {
                 ExitFlag = 255;
-                eLog() << Verbose(0) << "Not enough or invalid arguments for adding atom: -a <element> <x> <y> <z>" << endl;
+                DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments for adding atom: -a <element> <x> <y> <z>" << endl);
                 performCriticalExit();
               } else {
@@ -1654,5 +1671,5 @@
                     configPresent = present;
                 } else
-                  eLog() << Verbose(1) << "Could not find the specified element." << endl;
+                  DoeLog(1) && (eLog()<< Verbose(1) << "Could not find the specified element." << endl);
                 argptr+=4;
               }
@@ -1667,5 +1684,5 @@
               if ((argptr >= argc) || (argv[argptr][0] == '-')) {
                 ExitFlag = 255;
-                eLog() << Verbose(0) << "Not enough or invalid arguments given for setting MPQC basis: -B <basis name>" << endl;
+                DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for setting MPQC basis: -B <basis name>" << endl);
                 performCriticalExit();
               } else {
@@ -1727,147 +1744,162 @@
               break;
             case 'C':
-              if (ExitFlag == 0) ExitFlag = 1;
-              if ((argptr >= argc)) {
-                ExitFlag = 255;
-                eLog() << Verbose(0) << "Not enough or invalid arguments given for pair correlation analysis: -C <type: E/P/S> [more params] <output> <bin output> <BinStart> <BinEnd>" << endl;
-                performCriticalExit();
-              } else {
-                switch(argv[argptr][0]) {
-                  case 'E':
-                    {
-                      if ((argptr+6 >= argc) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+5])) || (!IsValidNumber(argv[argptr+6])) || (!IsValidNumber(argv[argptr+2])) || (argv[argptr+1][0] == '-') || (argv[argptr+2][0] == '-') || (argv[argptr+3][0] == '-') || (argv[argptr+4][0] == '-')) {
-                        ExitFlag = 255;
-                        eLog() << Verbose(0) << "Not enough or invalid arguments given for pair correlation analysis: -C E <Z1> <Z2> <output> <bin output>" << endl;
-                        performCriticalExit();
-                      } else {
-                        ofstream output(argv[argptr+3]);
-                        ofstream binoutput(argv[argptr+4]);
-                        const double BinStart = atof(argv[argptr+5]);
-                        const double BinEnd = atof(argv[argptr+6]);
-
-                        element *elemental = periode->FindElement((const int) atoi(argv[argptr+1]));
-                        element *elemental2 = periode->FindElement((const int) atoi(argv[argptr+2]));
-                        PairCorrelationMap *correlationmap = PairCorrelation(molecules, elemental, elemental2);
-                        //OutputCorrelationToSurface(&output, correlationmap);
-                        BinPairMap *binmap = BinData( correlationmap, 0.5, BinStart, BinEnd );
-                        OutputCorrelation ( &binoutput, binmap );
-                        output.close();
-                        binoutput.close();
-                        delete(binmap);
-                        delete(correlationmap);
-                        argptr+=7;
+              {
+                int ranges[3] = {1, 1, 1};
+                bool periodic = (argv[argptr-1][2] =='p');
+                if (ExitFlag == 0) ExitFlag = 1;
+                if ((argptr >= argc)) {
+                  ExitFlag = 255;
+                  DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for pair correlation analysis: -C[p] <type: E/P/S> [more params] <output> <bin output> <BinStart> <BinEnd>" << endl);
+                  performCriticalExit();
+                } else {
+                  switch(argv[argptr][0]) {
+                    case 'E':
+                      {
+                        if ((argptr+6 >= argc) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+5])) || (!IsValidNumber(argv[argptr+6])) || (!IsValidNumber(argv[argptr+2])) || (argv[argptr+1][0] == '-') || (argv[argptr+2][0] == '-') || (argv[argptr+3][0] == '-') || (argv[argptr+4][0] == '-')) {
+                          ExitFlag = 255;
+                          DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for pair correlation analysis: -C E <Z1> <Z2> <output> <bin output>" << endl);
+                          performCriticalExit();
+                        } else {
+                          ofstream output(argv[argptr+3]);
+                          ofstream binoutput(argv[argptr+4]);
+                          const double BinStart = atof(argv[argptr+5]);
+                          const double BinEnd = atof(argv[argptr+6]);
+
+                          element *elemental = periode->FindElement((const int) atoi(argv[argptr+1]));
+                          element *elemental2 = periode->FindElement((const int) atoi(argv[argptr+2]));
+                          PairCorrelationMap *correlationmap = NULL;
+                          if (periodic)
+                            correlationmap = PeriodicPairCorrelation(molecules, elemental, elemental2, ranges);
+                          else
+                            correlationmap = PairCorrelation(molecules, elemental, elemental2);
+                          //OutputCorrelationToSurface(&output, correlationmap);
+                          BinPairMap *binmap = BinData( correlationmap, 0.5, BinStart, BinEnd );
+                          OutputCorrelation ( &binoutput, binmap );
+                          output.close();
+                          binoutput.close();
+                          delete(binmap);
+                          delete(correlationmap);
+                          argptr+=7;
+                        }
                       }
-                    }
-                    break;
-
-                  case 'P':
-                    {
-                      if ((argptr+8 >= argc) || (!IsValidNumber(argv[argptr+1])) ||  (!IsValidNumber(argv[argptr+2])) || (!IsValidNumber(argv[argptr+3])) || (!IsValidNumber(argv[argptr+4])) || (!IsValidNumber(argv[argptr+7])) || (!IsValidNumber(argv[argptr+8])) || (argv[argptr+1][0] == '-') || (argv[argptr+2][0] == '-') || (argv[argptr+3][0] == '-') || (argv[argptr+4][0] == '-') || (argv[argptr+5][0] == '-') || (argv[argptr+6][0] == '-')) {
-                        ExitFlag = 255;
-                        eLog() << Verbose(0) << "Not enough or invalid arguments given for pair correlation analysis: -C P <Z1> <x> <y> <z> <output> <bin output>" << endl;
-                        performCriticalExit();
-                      } else {
-                        ofstream output(argv[argptr+5]);
-                        ofstream binoutput(argv[argptr+6]);
-                        const double BinStart = atof(argv[argptr+7]);
-                        const double BinEnd = atof(argv[argptr+8]);
-
-                        element *elemental = periode->FindElement((const int) atoi(argv[argptr+1]));
-                        Vector *Point = new Vector((const double) atof(argv[argptr+1]),(const double) atof(argv[argptr+2]),(const double) atof(argv[argptr+3]));
-                        CorrelationToPointMap *correlationmap = CorrelationToPoint(molecules, elemental, Point);
-                        //OutputCorrelationToSurface(&output, correlationmap);
-                        BinPairMap *binmap = BinData( correlationmap, 0.5, BinStart, BinEnd );
-                        OutputCorrelation ( &binoutput, binmap );
-                        output.close();
-                        binoutput.close();
-                        delete(Point);
-                        delete(binmap);
-                        delete(correlationmap);
-                        argptr+=9;
+                      break;
+
+                    case 'P':
+                      {
+                        if ((argptr+8 >= argc) || (!IsValidNumber(argv[argptr+1])) ||  (!IsValidNumber(argv[argptr+2])) || (!IsValidNumber(argv[argptr+3])) || (!IsValidNumber(argv[argptr+4])) || (!IsValidNumber(argv[argptr+7])) || (!IsValidNumber(argv[argptr+8])) || (argv[argptr+1][0] == '-') || (argv[argptr+2][0] == '-') || (argv[argptr+3][0] == '-') || (argv[argptr+4][0] == '-') || (argv[argptr+5][0] == '-') || (argv[argptr+6][0] == '-')) {
+                          ExitFlag = 255;
+                          DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for pair correlation analysis: -C P <Z1> <x> <y> <z> <output> <bin output>" << endl);
+                          performCriticalExit();
+                        } else {
+                          ofstream output(argv[argptr+5]);
+                          ofstream binoutput(argv[argptr+6]);
+                          const double BinStart = atof(argv[argptr+7]);
+                          const double BinEnd = atof(argv[argptr+8]);
+
+                          element *elemental = periode->FindElement((const int) atoi(argv[argptr+1]));
+                          Vector *Point = new Vector((const double) atof(argv[argptr+1]),(const double) atof(argv[argptr+2]),(const double) atof(argv[argptr+3]));
+                          CorrelationToPointMap *correlationmap = NULL;
+                          if (periodic)
+                            correlationmap  = PeriodicCorrelationToPoint(molecules, elemental, Point, ranges);
+                          else
+                            correlationmap = CorrelationToPoint(molecules, elemental, Point);
+                          //OutputCorrelationToSurface(&output, correlationmap);
+                          BinPairMap *binmap = BinData( correlationmap, 0.5, BinStart, BinEnd );
+                          OutputCorrelation ( &binoutput, binmap );
+                          output.close();
+                          binoutput.close();
+                          delete(Point);
+                          delete(binmap);
+                          delete(correlationmap);
+                          argptr+=9;
+                        }
                       }
-                    }
-                    break;
-
-                  case 'S':
-                    {
-                      if ((argptr+6 >= argc) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+4])) || (!IsValidNumber(argv[argptr+5])) || (!IsValidNumber(argv[argptr+6])) || (argv[argptr+1][0] == '-') || (argv[argptr+2][0] == '-') || (argv[argptr+3][0] == '-')) {
-                        ExitFlag = 255;
-                        eLog() << Verbose(0) << "Not enough or invalid arguments given for pair correlation analysis: -C S <Z> <output> <bin output> <BinWidth> <BinStart> <BinEnd>" << endl;
-                        performCriticalExit();
-                      } else {
-                        ofstream output(argv[argptr+2]);
-                        ofstream binoutput(argv[argptr+3]);
-                        const double radius = 4.;
-                        const double BinWidth = atof(argv[argptr+4]);
-                        const double BinStart = atof(argv[argptr+5]);
-                        const double BinEnd = atof(argv[argptr+6]);
-                        double LCWidth = 20.;
-                        if (BinEnd > 0) {
-                          if (BinEnd > 2.*radius)
-                              LCWidth = BinEnd;
+                      break;
+
+                    case 'S':
+                      {
+                        if ((argptr+6 >= argc) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+4])) || (!IsValidNumber(argv[argptr+5])) || (!IsValidNumber(argv[argptr+6])) || (argv[argptr+1][0] == '-') || (argv[argptr+2][0] == '-') || (argv[argptr+3][0] == '-')) {
+                          ExitFlag = 255;
+                          DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for pair correlation analysis: -C S <Z> <output> <bin output> <BinWidth> <BinStart> <BinEnd>" << endl);
+                          performCriticalExit();
+                        } else {
+                          ofstream output(argv[argptr+2]);
+                          ofstream binoutput(argv[argptr+3]);
+                          const double radius = 4.;
+                          const double BinWidth = atof(argv[argptr+4]);
+                          const double BinStart = atof(argv[argptr+5]);
+                          const double BinEnd = atof(argv[argptr+6]);
+                          double LCWidth = 20.;
+                          if (BinEnd > 0) {
+                            if (BinEnd > 2.*radius)
+                                LCWidth = BinEnd;
+                            else
+                              LCWidth = 2.*radius;
+                          }
+
+                          // get the boundary
+                          class molecule *Boundary = NULL;
+                          class Tesselation *TesselStruct = NULL;
+                          const LinkedCell *LCList = NULL;
+                          // find biggest molecule
+                          int counter  = 0;
+                          for (MoleculeList::iterator BigFinder = molecules->ListOfMolecules.begin(); BigFinder != molecules->ListOfMolecules.end(); BigFinder++) {
+                            if ((Boundary == NULL) || (Boundary->AtomCount < (*BigFinder)->AtomCount)) {
+                              Boundary = *BigFinder;
+                            }
+                            counter++;
+                          }
+                          bool *Actives = Malloc<bool>(counter, "ParseCommandLineOptions() - case C -- *Actives");
+                          counter = 0;
+                          for (MoleculeList::iterator BigFinder = molecules->ListOfMolecules.begin(); BigFinder != molecules->ListOfMolecules.end(); BigFinder++) {
+                            Actives[counter++] = (*BigFinder)->ActiveFlag;
+                            (*BigFinder)->ActiveFlag = (*BigFinder == Boundary) ? false : true;
+                          }
+                          LCList = new LinkedCell(Boundary, LCWidth);
+                          element *elemental = periode->FindElement((const int) atoi(argv[argptr+1]));
+                          FindNonConvexBorder(Boundary, TesselStruct, LCList, radius, NULL);
+                          CorrelationToSurfaceMap *surfacemap = NULL;
+                          if (periodic)
+                            surfacemap = PeriodicCorrelationToSurface( molecules, elemental, TesselStruct, LCList, ranges);
                           else
-                            LCWidth = 2.*radius;
+                            surfacemap = CorrelationToSurface( molecules, elemental, TesselStruct, LCList);
+                          OutputCorrelationToSurface(&output, surfacemap);
+                          // check whether radius was appropriate
+                          {
+                            double start; double end;
+                            GetMinMax( surfacemap, start, end);
+                            if (LCWidth < end)
+                              DoeLog(1) && (eLog()<< Verbose(1) << "Linked Cell width is smaller than the found range of values! Bins can only be correct up to: " << radius << "." << endl);
+                          }
+                          BinPairMap *binmap = BinData( surfacemap, BinWidth, BinStart, BinEnd );
+                          OutputCorrelation ( &binoutput, binmap );
+                          output.close();
+                          binoutput.close();
+                          for (MoleculeList::iterator BigFinder = molecules->ListOfMolecules.begin(); BigFinder != molecules->ListOfMolecules.end(); BigFinder++)
+                            (*BigFinder)->ActiveFlag = Actives[counter++];
+                          Free(&Actives);
+                          delete(LCList);
+                          delete(TesselStruct);
+                          delete(binmap);
+                          delete(surfacemap);
+                          argptr+=7;
                         }
-
-                        // get the boundary
-                        class molecule *Boundary = NULL;
-                        class Tesselation *TesselStruct = NULL;
-                        const LinkedCell *LCList = NULL;
-                        // find biggest molecule
-                        int counter  = 0;
-                        for (MoleculeList::iterator BigFinder = molecules->ListOfMolecules.begin(); BigFinder != molecules->ListOfMolecules.end(); BigFinder++) {
-                          if ((Boundary == NULL) || (Boundary->AtomCount < (*BigFinder)->AtomCount)) {
-                            Boundary = *BigFinder;
-                          }
-                          counter++;
-                        }
-                        bool *Actives = Malloc<bool>(counter, "ParseCommandLineOptions() - case C -- *Actives");
-                        counter = 0;
-                        for (MoleculeList::iterator BigFinder = molecules->ListOfMolecules.begin(); BigFinder != molecules->ListOfMolecules.end(); BigFinder++) {
-                          Actives[counter++] = (*BigFinder)->ActiveFlag;
-                          (*BigFinder)->ActiveFlag = (*BigFinder == Boundary) ? false : true;
-                        }
-                        LCList = new LinkedCell(Boundary, LCWidth);
-                        element *elemental = periode->FindElement((const int) atoi(argv[argptr+1]));
-                        FindNonConvexBorder(Boundary, TesselStruct, LCList, radius, NULL);
-                        //int ranges[NDIM] = {1,1,1};
-                        CorrelationToSurfaceMap *surfacemap = CorrelationToSurface( molecules, elemental, TesselStruct, LCList); // for Periodic..(): ..., ranges );
-                        OutputCorrelationToSurface(&output, surfacemap);
-                        // check whether radius was appropriate
-                        {
-                        double start; double end;
-                        GetMinMax( surfacemap, start, end);
-                        if (LCWidth < end)
-                          eLog() << Verbose(1) << "Linked Cell width is smaller than the found range of values! Bins can only be correct up to: " << radius << "." << endl;
-                        }
-                        BinPairMap *binmap = BinData( surfacemap, BinWidth, BinStart, BinEnd );
-                        OutputCorrelation ( &binoutput, binmap );
-                        output.close();
-                        binoutput.close();
-                        for (MoleculeList::iterator BigFinder = molecules->ListOfMolecules.begin(); BigFinder != molecules->ListOfMolecules.end(); BigFinder++)
-                          (*BigFinder)->ActiveFlag = Actives[counter++];
-                        Free(&Actives);
-                        delete(LCList);
-                        delete(TesselStruct);
-                        delete(binmap);
-                        delete(surfacemap);
-                        argptr+=7;
                       }
-                    }
-                    break;
-
-                  default:
-                    ExitFlag = 255;
-                    eLog() << Verbose(0) << "Invalid type given for pair correlation analysis: -C <type: E/P/S> [more params] <output> <bin output>" << endl;
-                    performCriticalExit();
-                    break;
+                      break;
+
+                    default:
+                      ExitFlag = 255;
+                      DoeLog(0) && (eLog()<< Verbose(0) << "Invalid type given for pair correlation analysis: -C <type: E/P/S> [more params] <output> <bin output>" << endl);
+                      performCriticalExit();
+                      break;
+                  }
                 }
-              }
-              break;
+                break;
+              }
             case 'E':
               if (ExitFlag == 0) ExitFlag = 1;
               if ((argptr+1 >= argc) || (!IsValidNumber(argv[argptr])) || (argv[argptr+1][0] == '-')) {
                 ExitFlag = 255;
-                eLog() << Verbose(0) << "Not enough or invalid arguments given for changing element: -E <atom nr.> <element>" << endl;
+                DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for changing element: -E <atom nr.> <element>" << endl);
                 performCriticalExit();
               } else {
@@ -1882,5 +1914,5 @@
               if (ExitFlag == 0) ExitFlag = 1;
               MaxDistance = -1;
-              if (argv[argptr-1][2] == 'F') {
+              if (argv[argptr-1][2] == 'F') { // option is -FF?
                 // fetch first argument as max distance to surface
                 MaxDistance = atof(argv[argptr++]);
@@ -1889,5 +1921,5 @@
               if ((argptr+7 >=argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) || (!IsValidNumber(argv[argptr+3])) || (!IsValidNumber(argv[argptr+4])) || (!IsValidNumber(argv[argptr+5])) || (!IsValidNumber(argv[argptr+6])) || (!IsValidNumber(argv[argptr+7]))) {
                 ExitFlag = 255;
-                eLog() << Verbose(0) << "Not enough or invalid arguments given for filling box with water: -F <xyz of filler> <dist_x> <dist_y> <dist_z> <boundary> <randatom> <randmol> <DoRotate>" << endl;
+                DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for filling box with water: -F <xyz of filler> <dist_x> <dist_y> <dist_z> <boundary> <randatom> <randmol> <DoRotate>" << endl);
                 performCriticalExit();
               } else {
@@ -1897,5 +1929,5 @@
                 molecule *filler = new molecule(periode);
                 if (!filler->AddXYZFile(argv[argptr])) {
-                  eLog() << Verbose(0) << "Could not parse filler molecule from " << argv[argptr] << "." << endl;
+                  DoeLog(0) && (eLog()<< Verbose(0) << "Could not parse filler molecule from " << argv[argptr] << "." << endl);
                 }
                 filler->SetNameFromFilename(argv[argptr]);
@@ -1919,5 +1951,5 @@
               if ((argptr >= argc) || (argv[argptr][0] == '-')) {
                 ExitFlag =255;
-                eLog() << Verbose(0) << "Missing source file for bonds in molecule: -A <bond sourcefile>" << endl;
+                DoeLog(0) && (eLog()<< Verbose(0) << "Missing source file for bonds in molecule: -A <bond sourcefile>" << endl);
                 performCriticalExit();
               } else {
@@ -1934,10 +1966,10 @@
               if ((argptr >= argc) || (argv[argptr][0] == '-')) {
                 ExitFlag =255;
-                eLog() << Verbose(0) << "Missing path of adjacency file: -j <path>" << endl;
+                DoeLog(0) && (eLog()<< Verbose(0) << "Missing path of adjacency file: -j <path>" << endl);
                 performCriticalExit();
               } else {
                 Log() << Verbose(0) << "Storing adjacency to path " << argv[argptr] << "." << endl;
                 configuration.BG->ConstructBondGraph(mol);
-                mol->StoreAdjacencyToFile(argv[argptr]);
+                mol->StoreAdjacencyToFile(NULL, argv[argptr]);
                 argptr+=1;
               }
@@ -1948,10 +1980,10 @@
               if ((argptr >= argc) || (argv[argptr][0] == '-')) {
                 ExitFlag =255;
-                eLog() << Verbose(0) << "Missing path of bonds file: -j <path>" << endl;
+                DoeLog(0) && (eLog()<< Verbose(0) << "Missing path of bonds file: -j <path>" << endl);
                 performCriticalExit();
               } else {
                 Log() << Verbose(0) << "Storing bonds to path " << argv[argptr] << "." << endl;
                 configuration.BG->ConstructBondGraph(mol);
-                mol->StoreBondsToFile(argv[argptr]);
+                mol->StoreBondsToFile(NULL, argv[argptr]);
                 argptr+=1;
               }
@@ -1962,5 +1994,5 @@
               if ((argptr+1 >= argc) || (argv[argptr+1][0] == '-')){
                 ExitFlag = 255;
-                eLog() << Verbose(0) << "Not enough or invalid arguments given for non-convex envelope: -o <radius> <tecplot output file>" << endl;
+                DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for non-convex envelope: -o <radius> <tecplot output file>" << endl);
                 performCriticalExit();
               } else {
@@ -1998,5 +2030,5 @@
               if ((argptr >= argc) || (argv[argptr][0] == '-')) {
                 ExitFlag = 255;
-                eLog() << Verbose(0) << "Not enough or invalid arguments given for storing tempature: -S <temperature file>" << endl;
+                DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for storing tempature: -S <temperature file>" << endl);
                 performCriticalExit();
               } else {
@@ -2016,5 +2048,5 @@
               if ((argptr >= argc) || (argv[argptr][0] == '-')) {
                 ExitFlag = 255;
-                eLog() << Verbose(0) << "Not enough or invalid arguments given for storing tempature: -L <step0> <step1> <prefix> <identity mapping?>" << endl;
+                DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for storing tempature: -L <step0> <step1> <prefix> <identity mapping?>" << endl);
                 performCriticalExit();
               } else {
@@ -2034,5 +2066,5 @@
               if ((argptr >= argc) || (argv[argptr][0] == '-')) {
                 ExitFlag = 255;
-                eLog() << Verbose(0) << "Not enough or invalid arguments given for parsing and integrating forces: -P <forces file>" << endl;
+                DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for parsing and integrating forces: -P <forces file>" << endl);
                 performCriticalExit();
               } else {
@@ -2050,5 +2082,5 @@
               if ((argptr+1 >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])))  {
                 ExitFlag = 255;
-                eLog() << Verbose(0) << "Not enough or invalid arguments given for removing atoms: -R <id> <distance>" << endl;
+                DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for removing atoms: -R <id> <distance>" << endl);
                 performCriticalExit();
               } else {
@@ -2067,5 +2099,5 @@
                   }
                 } else {
-                  eLog() << Verbose(1) << "Removal failed due to missing atoms on molecule or wrong id." << endl;
+                  DoeLog(1) && (eLog()<< Verbose(1) << "Removal failed due to missing atoms on molecule or wrong id." << endl);
                 }
                 argptr+=2;
@@ -2076,5 +2108,5 @@
               if ((argptr+2 >= argc) || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) ) {
                 ExitFlag = 255;
-                eLog() << Verbose(0) << "Not enough or invalid arguments given for translation: -t <x> <y> <z>" << endl;
+                DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for translation: -t <x> <y> <z>" << endl);
                 performCriticalExit();
               } else {
@@ -2092,5 +2124,5 @@
               if ((argptr+2 >= argc) || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) ) {
                 ExitFlag = 255;
-                eLog() << Verbose(0) << "Not enough or invalid arguments given for periodic translation: -T <x> <y> <z>" << endl;
+                DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for periodic translation: -T <x> <y> <z>" << endl);
                 performCriticalExit();
               } else {
@@ -2108,5 +2140,5 @@
               if ((argptr >= argc) || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) ) {
                 ExitFlag = 255;
-                eLog() << Verbose(0) << "Not enough or invalid arguments given for scaling: -s <factor_x> [factor_y] [factor_z]" << endl;
+                DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for scaling: -s <factor_x> [factor_y] [factor_z]" << endl);
                 performCriticalExit();
               } else {
@@ -2133,5 +2165,5 @@
               if ((argptr+5 >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) || (!IsValidNumber(argv[argptr+3])) || (!IsValidNumber(argv[argptr+4])) || (!IsValidNumber(argv[argptr+5])) ) {
                 ExitFlag = 255;
-                eLog() << Verbose(0) << "Not enough or invalid arguments given for centering in box: -b <xx> <xy> <xz> <yy> <yz> <zz>" << endl;
+                DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for centering in box: -b <xx> <xy> <xz> <yy> <yz> <zz>" << endl);
                 performCriticalExit();
               } else {
@@ -2152,5 +2184,5 @@
               if ((argptr+5 >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) || (!IsValidNumber(argv[argptr+3])) || (!IsValidNumber(argv[argptr+4])) || (!IsValidNumber(argv[argptr+5])) ) {
                 ExitFlag = 255;
-                eLog() << Verbose(0) << "Not enough or invalid arguments given for bounding in box: -B <xx> <xy> <xz> <yy> <yz> <zz>" << endl;
+                DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for bounding in box: -B <xx> <xy> <xz> <yy> <yz> <zz>" << endl);
                 performCriticalExit();
               } else {
@@ -2171,5 +2203,5 @@
               if ((argptr+2 >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) ) {
                 ExitFlag = 255;
-                eLog() << Verbose(0) << "Not enough or invalid arguments given for centering with boundary: -c <boundary_x> <boundary_y> <boundary_z>" << endl;
+                DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for centering with boundary: -c <boundary_x> <boundary_y> <boundary_z>" << endl);
                 performCriticalExit();
               } else {
@@ -2206,5 +2238,5 @@
               if ((argptr >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr])))  {
                 ExitFlag = 255;
-                eLog() << Verbose(0) << "Not enough or invalid arguments given for removing atoms: -r <id>" << endl;
+                DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for removing atoms: -r <id>" << endl);
                 performCriticalExit();
               } else {
@@ -2220,5 +2252,5 @@
               if ((argptr+1 >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1]))) {
                 ExitFlag = 255;
-                eLog() << Verbose(0) << "Not enough or invalid arguments for fragmentation: -f <max. bond distance> <bond order>" << endl;
+                DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments for fragmentation: -f <max. bond distance> <bond order>" << endl);
                 performCriticalExit();
               } else {
@@ -2240,5 +2272,5 @@
               j = atoi(argv[argptr++]);
               if ((j<0) || (j>1)) {
-                eLog() << Verbose(1) << "Argument of '-m' should be either 0 for no-rotate or 1 for rotate." << endl;
+                DoeLog(1) && (eLog()<< Verbose(1) << "Argument of '-m' should be either 0 for no-rotate or 1 for rotate." << endl);
                 j = 0;
               }
@@ -2254,5 +2286,5 @@
               if ((argptr+1 >= argc) || (argv[argptr][0] == '-')){
                 ExitFlag = 255;
-                eLog() << Verbose(0) << "Not enough or invalid arguments given for convex envelope: -o <convex output file> <non-convex output file>" << endl;
+                DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for convex envelope: -o <convex output file> <non-convex output file>" << endl);
                 performCriticalExit();
               } else {
@@ -2279,5 +2311,5 @@
               if ((argptr+1 >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) ) {
                 ExitFlag = 255;
-                eLog() << Verbose(0) << "Not enough or invalid arguments given for suspension with specified volume: -U <volume> <density>" << endl;
+                DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for suspension with specified volume: -U <volume> <density>" << endl);
                 performCriticalExit();
               } else {
@@ -2290,5 +2322,5 @@
                 if (volume != -1)
                   ExitFlag = 255;
-                  eLog() << Verbose(0) << "Not enough or invalid arguments given for suspension: -u <density>" << endl;
+                  DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for suspension: -u <density>" << endl);
                   performCriticalExit();
               } else {
@@ -2298,5 +2330,5 @@
                 density = atof(argv[argptr++]);
                 if (density < 1.0) {
-                  eLog() << Verbose(1) << "Density must be greater than 1.0g/cm^3 !" << endl;
+                  DoeLog(1) && (eLog()<< Verbose(1) << "Density must be greater than 1.0g/cm^3 !" << endl);
                   density = 1.3;
                 }
@@ -2304,5 +2336,5 @@
 //                  repetition[i] = atoi(argv[argptr++]);
 //                  if (repetition[i] < 1)
-//                    eLog() << Verbose(1) << "repetition value must be greater 1!" << endl;
+//                    DoeLog(1) && (eLog()<< Verbose(1) << "repetition value must be greater 1!" << endl);
 //                  repetition[i] = 1;
 //                }
@@ -2314,5 +2346,5 @@
               if ((argptr+2 >= argc) || (argv[argptr][0] == '-') || (!IsValidNumber(argv[argptr])) || (!IsValidNumber(argv[argptr+1])) || (!IsValidNumber(argv[argptr+2])) ) {
                 ExitFlag = 255;
-                eLog() << Verbose(0) << "Not enough or invalid arguments given for repeating cells: -d <repeat_x> <repeat_y> <repeat_z>" << endl;
+                DoeLog(0) && (eLog()<< Verbose(0) << "Not enough or invalid arguments given for repeating cells: -d <repeat_x> <repeat_y> <repeat_z>" << endl);
                 performCriticalExit();
               } else {
@@ -2325,5 +2357,5 @@
                   Vector ** vectors;
                   if (faktor < 1) {
-                    eLog() << Verbose(1) << "Repetition factor mus be greater than 1!" << endl;
+                    DoeLog(1) && (eLog()<< Verbose(1) << "Repetition factor mus be greater than 1!" << endl);
                     faktor = 1;
                   }
@@ -2342,5 +2374,5 @@
                     }
                     if (count != j)
-                      eLog() << Verbose(1) << "AtomCount " << count << " is not equal to number of atoms in molecule " << j << "!" << endl;
+                      DoeLog(1) && (eLog()<< Verbose(1) << "AtomCount " << count << " is not equal to number of atoms in molecule " << j << "!" << endl);
                     x.Zero();
                     y.Zero();
@@ -2409,4 +2441,7 @@
   cout << ESPACKVersion << endl;
 
+  Log() << Verbose(1) << "test" << endl;
+  DoLog(3) && (Log() << Verbose(1) << "test");
+
   setVerbosity(0);
 
Index: src/config.cpp
===================================================================
--- src/config.cpp	(revision 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/config.cpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -74,5 +74,5 @@
   file= new ifstream(filename);
   if (file == NULL) {
-    eLog() << Verbose(1) << "config file " << filename << " missing!" << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "config file " << filename << " missing!" << endl);
     return;
   }
@@ -89,5 +89,5 @@
   // allocate buffer's 1st dimension
   if (buffer != NULL) {
-    eLog() << Verbose(1) << "FileBuffer->buffer is not NULL!" << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "FileBuffer->buffer is not NULL!" << endl);
     return;
   } else
@@ -144,5 +144,5 @@
   map<const char *, int, IonTypeCompare> IonTypeLineMap;
   if (LineMapping == NULL) {
-    eLog() << Verbose(0) << "map pointer is NULL: " << LineMapping << endl;
+    DoeLog(0) && (eLog()<< Verbose(0) << "map pointer is NULL: " << LineMapping << endl);
     performCriticalExit();
     return;
@@ -160,5 +160,5 @@
       LineMapping[CurrentLine+(nr++)] = runner->second;
     else {
-      eLog() << Verbose(0) << "config::MapIonTypesInBuffer - NoAtoms is wrong: We are past the end of the file!" << endl;
+      DoeLog(0) && (eLog()<< Verbose(0) << "config::MapIonTypesInBuffer - NoAtoms is wrong: We are past the end of the file!" << endl);
       performCriticalExit();
     }
@@ -659,5 +659,5 @@
 {
   if (FileBuffer != NULL) {
-    eLog() << Verbose(2) << "deleting present FileBuffer in PrepareFileBuffer()." << endl;
+    DoeLog(2) && (eLog()<< Verbose(2) << "deleting present FileBuffer in PrepareFileBuffer()." << endl);
     delete(FileBuffer);
   }
@@ -685,5 +685,5 @@
 
   if (mol == NULL) {
-    eLog() << Verbose(0) << "Molecule is not allocated in LoadMolecule(), exit.";
+    DoeLog(0) && (eLog()<< Verbose(0) << "Molecule is not allocated in LoadMolecule(), exit.");
     performCriticalExit();
   }
@@ -691,5 +691,5 @@
   ParseForParameter(verbose,FileBuffer,"MaxTypes", 0, 1, 1, int_type, &(MaxTypes), 1, critical);
   if (MaxTypes == 0) {
-    eLog() << Verbose(1) << "There are no atoms according to MaxTypes in this config file." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "There are no atoms according to MaxTypes in this config file." << endl);
     //performCriticalExit();
   } else {
@@ -710,5 +710,5 @@
     sprintf(name,"Ion_Type%i",MaxTypes);
     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;
+      DoeLog(0) && (eLog()<< Verbose(0) << "There are no atoms in the config file!" << endl);
       performCriticalExit();
       return;
@@ -855,5 +855,5 @@
   ifstream *file = new ifstream(filename);
   if (file == NULL) {
-    eLog() << Verbose(1) << "config file " << filename << " missing!" << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "config file " << filename << " missing!" << endl);
     return;
   }
@@ -1065,5 +1065,5 @@
       Log() << Verbose(0) << "Bond length table loaded successfully." << endl;
     } else {
-      eLog() << Verbose(1) << "Bond length table loading failed." << endl;
+      DoeLog(1) && (eLog()<< Verbose(1) << "Bond length table loading failed." << endl);
     }
   }
@@ -1094,5 +1094,5 @@
   ifstream *file = new ifstream(filename);
   if (file == NULL) {
-    eLog() << Verbose(1) << "config file " << filename << " missing!" << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "config file " << filename << " missing!" << endl);
     return;
   }
@@ -1433,5 +1433,5 @@
     return result;
   } else {
-    eLog() << Verbose(1) << "Cannot open output file:" << filename << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Cannot open output file:" << filename << endl);
     return false;
   }
@@ -1455,5 +1455,5 @@
     output = new ofstream(fname->str().c_str(), ios::out);
     if (output == NULL) {
-      eLog() << Verbose(1) << "Cannot open mpqc output file:" << fname << endl;
+      DoeLog(1) && (eLog()<< Verbose(1) << "Cannot open mpqc output file:" << fname << endl);
       delete(fname);
       return false;
@@ -1498,5 +1498,5 @@
     output = new ofstream(fname->str().c_str(), ios::out);
     if (output == NULL) {
-      eLog() << Verbose(1) << "Cannot open mpqc hessian output file:" << fname << endl;
+      DoeLog(1) && (eLog()<< Verbose(1) << "Cannot open mpqc hessian output file:" << fname << endl);
       delete(fname);
       return false;
@@ -1554,5 +1554,5 @@
   f = fopen(name, "w" );
   if (f == NULL) {
-    eLog() << Verbose(1) << "Cannot open pdb output file:" << name << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Cannot open pdb output file:" << name << endl);
     return false;
   }
@@ -1609,5 +1609,5 @@
   f = fopen(name, "w" );
   if (f == NULL) {
-    eLog() << Verbose(1) << "Cannot open pdb output file:" << name << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Cannot open pdb output file:" << name << endl);
     Free(&elementNo);
     return false;
@@ -1659,5 +1659,5 @@
   output = new ofstream(fname->str().c_str(), ios::out);
   if (output == NULL) {
-    eLog() << Verbose(1) << "Cannot open tremolo output file:" << fname << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Cannot open tremolo output file:" << fname << endl);
     delete(fname);
     return false;
@@ -1714,5 +1714,5 @@
   output = new ofstream(fname->str().c_str(), ios::out);
   if (output == NULL) {
-    eLog() << Verbose(1) << "Cannot open tremolo output file:" << fname << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Cannot open tremolo output file:" << fname << endl);
     delete(fname);
     return false;
Index: src/ellipsoid.cpp
===================================================================
--- src/ellipsoid.cpp	(revision 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/ellipsoid.cpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -241,5 +241,5 @@
     x = new Vector[PointsToPick];
   } else {
-    eLog() << Verbose(2) << "Given pointer to vector array seems already allocated." << endl;
+    DoeLog(2) && (eLog()<< Verbose(2) << "Given pointer to vector array seems already allocated." << endl);
   }
 
@@ -341,5 +341,5 @@
     x = new Vector[PointsToPick];
   } else {
-    eLog() << Verbose(2) << "Given pointer to vector array seems already allocated." << endl;
+    DoeLog(2) && (eLog()<< Verbose(2) << "Given pointer to vector array seems already allocated." << endl);
   }
 
Index: src/helpers.hpp
===================================================================
--- src/helpers.hpp	(revision 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/helpers.hpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -134,5 +134,5 @@
   LookupTable = Calloc<T*>(count, "CreateFatherLookupTable - **LookupTable");
   if (LookupTable == NULL) {
-    eLog() << Verbose(0) << "LookupTable memory allocation failed!" << endl;
+    DoeLog(0) && (eLog()<< Verbose(0) << "LookupTable memory allocation failed!" << endl);
     performCriticalExit();
     status = false;
Index: src/linkedcell.cpp
===================================================================
--- src/linkedcell.cpp	(revision 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/linkedcell.cpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -47,5 +47,5 @@
   Log() << Verbose(1) << "Begin of LinkedCell" << endl;
   if ((set == NULL) || (set->IsEmpty())) {
-    eLog() << Verbose(1) << "set is NULL or contains no linked cell nodes!" << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "set is NULL or contains no linked cell nodes!" << endl);
     return;
   }
@@ -79,5 +79,5 @@
   Log() << Verbose(2) << "Allocating cells ... ";
   if (LC != NULL) {
-    eLog() << Verbose(1) << "Linked Cell list is already allocated, I do nothing." << endl;
+    DoeLog(1) && (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(1) << "set contains no linked cell nodes!" << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "set contains no linked cell nodes!" << endl);
     return;
   }
@@ -151,5 +151,5 @@
   Log() << Verbose(2) << "Allocating cells ... ";
   if (LC != NULL) {
-    eLog() << Verbose(1) << "Linked Cell list is already allocated, I do nothing." << endl;
+    DoeLog(1) && (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(1) << "indices are out of bounds!" << endl;
+  DoeLog(1) && (eLog()<< Verbose(1) << "indices are out of bounds!" << endl);
   return status;
 };
@@ -260,5 +260,5 @@
     return status;
   } else {
-    eLog() << Verbose(1) << "Node at " << *Walker << " is out of bounds." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Node at " << *Walker << " is out of bounds." << endl);
     return false;
   }
Index: src/log.cpp
===================================================================
--- src/log.cpp	(revision 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/log.cpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -28,4 +28,26 @@
 }
 
+/** Checks verbosity for logger.
+ * Is supposed to be used in construct as this:
+ * DoLog(2) && (Log() << Verbose(2) << "message." << endl);
+ * If DoLog does not return true, the right-hand side is not evaluated and we save some time.
+ * \param verbose verbosity level of this message
+ * \return true - print, false - don't
+ */
+bool DoLog(int verbose) {
+  return verbose <= logger::getInstance()->verbosity;
+}
+
+/** Checks verbosity for errorlogger.
+ * Is supposed to be used in construct as this:
+ * DoLog(2) && (Log() << Verbose(2) << "message." << endl);
+ * If DoLog does not return true, the right-hand side is not evaluated and we save some time.
+ * \param verbose verbosity level of this message
+ * \return true - print, false - don't
+ */
+bool DoeLog(int verbose) {
+  return verbose <= errorLogger::getInstance()->verbosity;
+}
+
 /**
  * Prints an error log entry.
Index: src/log.hpp
===================================================================
--- src/log.hpp	(revision 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/log.hpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -15,4 +15,6 @@
 class errorLogger * eLog();
 void setVerbosity(int verbosityLevel);
+bool DoLog(int verbose);
+bool DoeLog(int verbose);
 
 #endif /* LOG_HPP_ */
Index: src/molecule.cpp
===================================================================
--- src/molecule.cpp	(revision 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/molecule.cpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -194,5 +194,5 @@
   BondRescale = TopOrigin->type->HBondDistance[TopBond->BondDegree-1];
   if (BondRescale == -1) {
-    eLog() << Verbose(1) << "There is no typical hydrogen bond distance in replacing bond (" << TopOrigin->Name << "<->" << TopReplacement->Name << ") of degree " << TopBond->BondDegree << "!" << endl;
+    DoeLog(1) && (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;
@@ -237,5 +237,5 @@
             SecondOtherAtom = (*Runner)->GetOtherAtom(TopOrigin);
           } else {
-            eLog() << Verbose(2) << "Detected more than four bonds for atom " << TopOrigin->Name;
+            DoeLog(2) && (eLog()<< Verbose(2) << "Detected more than four bonds for atom " << TopOrigin->Name);
           }
         }
@@ -274,5 +274,5 @@
       bondangle = TopOrigin->type->HBondAngle[1];
       if (bondangle == -1) {
-        eLog() << Verbose(1) << "There is no typical hydrogen bond angle in replacing bond (" << TopOrigin->Name << "<->" << TopReplacement->Name << ") of degree " << TopBond->BondDegree << "!" << endl;
+        DoeLog(1) && (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;
@@ -396,5 +396,5 @@
       break;
     default:
-      eLog() << Verbose(1) << "BondDegree does not state single, double or triple bond!" << endl;
+      DoeLog(1) && (eLog()<< Verbose(1) << "BondDegree does not state single, double or triple bond!" << endl);
       AllWentWell = false;
       break;
@@ -447,5 +447,5 @@
     Walker->type = elemente->FindElement(shorthand);
     if (Walker->type == NULL) {
-      eLog() << Verbose(1) << "Could not parse the element at line: '" << line << "', setting to H.";
+      DoeLog(1) && (eLog()<< Verbose(1) << "Could not parse the element at line: '" << line << "', setting to H.");
       Walker->type = elemente->FindElement(1);
     }
@@ -543,5 +543,5 @@
     add(Binder, last);
   } else {
-    eLog() << Verbose(1) << "Could not add bond between " << atom1->Name << " and " << atom2->Name << " as one or both are not present in the molecule." << endl;
+    DoeLog(1) && (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;
@@ -555,5 +555,5 @@
 bool molecule::RemoveBond(bond *pointer)
 {
-  //eLog() << Verbose(1) << "molecule::RemoveBond: Function not implemented yet." << endl;
+  //DoeLog(1) && (eLog()<< Verbose(1) << "molecule::RemoveBond: Function not implemented yet." << endl);
   pointer->leftatom->RegisterBond(pointer);
   pointer->rightatom->RegisterBond(pointer);
@@ -569,5 +569,5 @@
 bool molecule::RemoveBonds(atom *BondPartner)
 {
-  //eLog() << Verbose(1) << "molecule::RemoveBond: Function not implemented yet." << endl;
+  //DoeLog(1) && (eLog()<< Verbose(1) << "molecule::RemoveBond: Function not implemented yet." << endl);
   BondList::const_iterator ForeRunner;
   while (!BondPartner->ListOfBonds.empty()) {
@@ -622,5 +622,5 @@
     AtomCount--;
   } else
-    eLog() << Verbose(1) << "Atom " << pointer->Name << " is of element " << pointer->type->Z << " but the entry in the table of the molecule is 0!" << endl;
+    DoeLog(1) && (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--;
@@ -640,5 +640,5 @@
     ElementsInMolecule[pointer->type->Z]--; // decrease number of atom of this element
   else
-    eLog() << Verbose(1) << "Atom " << pointer->Name << " is of element " << pointer->type->Z << " but the entry in the table of the molecule is 0!" << endl;
+    DoeLog(1) && (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_dynamics.cpp
===================================================================
--- src/molecule_dynamics.cpp	(revision 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/molecule_dynamics.cpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -306,5 +306,5 @@
   for (int i=mol->AtomCount; i--;) // now each single entry in the DoubleList should be <=1
     if (Params.DoubleList[i] > 1) {
-      eLog() << Verbose(0) << "Failed to create an injective PermutationMap!" << endl;
+      DoeLog(0) && (eLog()<< Verbose(0) << "Failed to create an injective PermutationMap!" << endl);
       performCriticalExit();
     }
@@ -428,10 +428,10 @@
             }
             if (Potential > Params.PenaltyConstants[2]) {
-              eLog() << Verbose(1) << "The two-step permutation procedure did not maintain injectivity!" << endl;
+              DoeLog(1) && (eLog()<< Verbose(1) << "The two-step permutation procedure did not maintain injectivity!" << endl);
               exit(255);
             }
             //Log() << Verbose(0) << endl;
           } else {
-            eLog() << Verbose(1) << *Runner << " was not the owner of " << *Sprinter << "!" << endl;
+            DoeLog(1) && (eLog()<< Verbose(1) << *Runner << " was not the owner of " << *Sprinter << "!" << endl);
             exit(255);
           }
@@ -568,10 +568,10 @@
     // parse file into ForceMatrix
     if (!Force.ParseMatrix(file, 0,0,0)) {
-      eLog() << Verbose(0) << "Could not parse Force Matrix file " << file << "." << endl;
+      DoeLog(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;
+      DoeLog(0) && (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 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/molecule_fragmentation.cpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -113,5 +113,5 @@
         testGraphInsert = FragmentList->insert(GraphPair (CurrentSet,pair<int,double>(NumberOfFragments++,1)));  // store fragment number and current factor
         if (!testGraphInsert.second) {
-          eLog() << Verbose(0) << "KeySet file must be corrupt as there are two equal key sets therein!" << endl;
+          DoeLog(0) && (eLog()<< Verbose(0) << "KeySet file must be corrupt as there are two equal key sets therein!" << endl);
           performCriticalExit();
         }
@@ -214,5 +214,5 @@
     Log() << Verbose(0) << "done." << endl;
   } else {
-    eLog() << Verbose(0) << "Unable to open " << line << " for writing keysets!" << endl;
+    DoeLog(0) && (eLog()<< Verbose(0) << "Unable to open " << line << " for writing keysets!" << endl);
     performCriticalExit();
     status = false;
@@ -372,5 +372,5 @@
       }
     } else {
-      eLog() << Verbose(0) << "Atom No. " << (*runner).second.first << " was not found in this molecule." << endl;
+      DoeLog(0) && (eLog()<< Verbose(0) << "Atom No. " << (*runner).second.first << " was not found in this molecule." << endl);
       performCriticalExit();
     }
@@ -447,5 +447,5 @@
     // transmorph graph keyset list into indexed KeySetList
     if (GlobalKeySetList == NULL) {
-      eLog() << Verbose(1) << "Given global key set list (graph) is NULL!" << endl;
+      DoeLog(1) && (eLog()<< Verbose(1) << "Given global key set list (graph) is NULL!" << endl);
       return false;
     }
@@ -455,5 +455,5 @@
     map<int, pair<double,int> > *AdaptiveCriteriaList = ScanAdaptiveFileIntoMap(path, *IndexKeySetList); // (Root No., (Value, Order)) !
     if (AdaptiveCriteriaList->empty()) {
-      eLog() << Verbose(2) << "Unable to parse file, incrementing all." << endl;
+      DoeLog(2) && (eLog()<< Verbose(2) << "Unable to parse file, incrementing all." << endl);
       while (Walker->next != end) {
         Walker = Walker->next;
@@ -644,5 +644,5 @@
         MolecularWalker->Leaf->FragmentBOSSANOVA(FragmentList[FragmentCounter], RootStack[FragmentCounter], MinimumRingSize);
       } else {
-        eLog() << Verbose(1) << "Subgraph " << MolecularWalker << " has no atoms!" << endl;
+        DoeLog(1) && (eLog()<< Verbose(1) << "Subgraph " << MolecularWalker << " has no atoms!" << endl);
       }
       FragmentCounter++;  // next fragment list
@@ -902,5 +902,5 @@
       }
     } else {
-      eLog() << Verbose(1) << "Son " << Runner->Name << " has father " << FatherOfRunner->Name << " but its entry in SonList is " << SonList[FatherOfRunner->nr] << "!" << endl;
+      DoeLog(1) && (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)) {
@@ -1137,5 +1137,5 @@
         Log() << Verbose(0) << endl;
         //if (!CheckForConnectedSubgraph(FragmentSearch->FragmentSet))
-          //eLog() << Verbose(1) << "The found fragment is not a connected subgraph!" << endl;
+          //DoeLog(1) && (eLog()<< Verbose(1) << "The found fragment is not a connected subgraph!" << endl);
         InsertFragmentIntoGraph(FragmentSearch);
       }
Index: src/molecule_graph.cpp
===================================================================
--- src/molecule_graph.cpp	(revision 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/molecule_graph.cpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -931,9 +931,9 @@
     }
     if (i == vertex->ListOfBonds.size()) {
-      eLog() << Verbose(0) << "Error: All Component entries are already occupied!" << endl;
+      DoeLog(0) && (eLog()<< Verbose(0) << "Error: All Component entries are already occupied!" << endl);
       performCriticalExit();
     }
   } else {
-    eLog() << Verbose(0) << "Error: Given vertex is NULL!" << endl;
+    DoeLog(0) && (eLog()<< Verbose(0) << "Error: Given vertex is NULL!" << endl);
     performCriticalExit();
   }
Index: src/moleculelist.cpp
===================================================================
--- src/moleculelist.cpp	(revision 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/moleculelist.cpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -314,5 +314,5 @@
   Tesselation *TesselStruct = NULL;
   if ((srcmol == NULL) || (mol == NULL)) {
-    eLog() << Verbose(1) << "Either fixed or variable molecule is given as NULL." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Either fixed or variable molecule is given as NULL." << endl);
     return false;
   }
@@ -322,5 +322,5 @@
   FindNonConvexBorder(mol, TesselStruct, (const LinkedCell *&)LCList, 4., NULL);
   if (TesselStruct == NULL) {
-    eLog() << Verbose(1) << "Could not tesselate the fixed molecule." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Could not tesselate the fixed molecule." << endl);
     return false;
   }
@@ -443,5 +443,5 @@
     input.open(line.c_str());
     if (input == NULL) {
-      eLog() << Verbose(0) << endl << "Unable to open " << line << ", is the directory correct?" << endl;
+      DoeLog(0) && (eLog()<< Verbose(0) << endl << "Unable to open " << line << ", is the directory correct?" << endl);
       performCriticalExit();
       return false;
@@ -652,5 +652,5 @@
       strcpy(PathBackup, path);
     else {
-      eLog() << Verbose(0) << "OutputConfigForListOfFragments: NULL default path obtained from config!" << endl;
+      DoeLog(0) && (eLog()<< Verbose(0) << "OutputConfigForListOfFragments: NULL default path obtained from config!" << endl);
       performCriticalExit();
     }
@@ -788,5 +788,5 @@
   if (!configuration->BG->ConstructBondGraph(mol)) {
     delete (mol);
-    eLog() << Verbose(1) << "There are no bonds." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "There are no bonds." << endl);
     return;
   }
@@ -799,5 +799,5 @@
   if ((Subgraphs == NULL) || (Subgraphs->next == NULL)) {
     delete (mol);
-    eLog() << Verbose(1) << "There are no atoms." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "There are no atoms." << endl);
     return;
   }
@@ -843,5 +843,5 @@
     Walker = mol->start->next;
     if ((Walker->nr <0) || (Walker->nr >= mol->AtomCount)) {
-      eLog() << Verbose(0) << "Index of atom " << *Walker << " is invalid!" << endl;
+      DoeLog(0) && (eLog()<< Verbose(0) << "Index of atom " << *Walker << " is invalid!" << endl);
       performCriticalExit();
     }
@@ -852,5 +852,5 @@
       molecules[FragmentCounter-1]->AddAtom(Walker);    // counting starts at 1
     } else {
-      eLog() << Verbose(0) << "Atom " << *Walker << " not associated to molecule!" << endl;
+      DoeLog(0) && (eLog()<< Verbose(0) << "Atom " << *Walker << " not associated to molecule!" << endl);
       performCriticalExit();
     }
Index: src/parser.cpp
===================================================================
--- src/parser.cpp	(revision 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/parser.cpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -160,5 +160,5 @@
   //Log() << Verbose(1) << "Opening " << name << " ... "  << input << endl;
   if (input == NULL) {
-    eLog() << Verbose(1) << endl << "Unable to open " << name << ", is the directory correct?" << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << endl << "Unable to open " << name << ", is the directory correct?" << endl);
     //performCriticalExit();
     return false;
@@ -183,5 +183,5 @@
   //Log() << Verbose(1) << "ColumnCounter[" << MatrixNr << "]: " << ColumnCounter[MatrixNr] << "." << endl;
   if (ColumnCounter[MatrixNr] == 0) {
-    eLog() << Verbose(0) << "ColumnCounter[" << MatrixNr << "]: " << ColumnCounter[MatrixNr] << " from file " << name << ", this is probably an error!" << endl;
+    DoeLog(0) && (eLog()<< Verbose(0) << "ColumnCounter[" << MatrixNr << "]: " << ColumnCounter[MatrixNr] << " from file " << name << ", this is probably an error!" << endl);
     performCriticalExit();
   }
@@ -199,5 +199,5 @@
   //Log() << Verbose(1) << "RowCounter[" << MatrixNr << "]: " << RowCounter[MatrixNr] << " from file " << name << "." << endl;
   if (RowCounter[MatrixNr] == 0) {
-    eLog() << Verbose(0) << "RowCounter[" << MatrixNr << "]: " << RowCounter[MatrixNr] << " from file " << name << ", this is probably an error!" << endl;
+    DoeLog(0) && (eLog()<< Verbose(0) << "RowCounter[" << MatrixNr << "]: " << RowCounter[MatrixNr] << " from file " << name << ", this is probably an error!" << endl);
     performCriticalExit();
   }
@@ -232,5 +232,5 @@
     }
   } else {
-    eLog() << Verbose(1) << "Matrix nr. " << MatrixNr << " has column and row count of (" << ColumnCounter[MatrixNr] << "," << RowCounter[MatrixNr] << "), could not allocate nor parse!" << endl; 
+    DoeLog(1) && (eLog()<< Verbose(1) << "Matrix nr. " << MatrixNr << " has column and row count of (" << ColumnCounter[MatrixNr] << "," << RowCounter[MatrixNr] << "), could not allocate nor parse!" << endl); 
   }
   input.close();
@@ -433,5 +433,5 @@
               //Log() << Verbose(0) << "Corresponding index in CurrentFragment is " << m << "." << endl;
               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;
+                DoeLog(0) && (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;
@@ -477,5 +477,5 @@
     output.open(line.str().c_str(), ios::out);
     if (output == NULL) {
-      eLog() << Verbose(0) << "Unable to open output energy file " << line.str() << "!" << endl;
+      DoeLog(0) && (eLog()<< Verbose(0) << "Unable to open output energy file " << line.str() << "!" << endl);
       performCriticalExit();
       return false;
@@ -507,5 +507,5 @@
   output.open(line.str().c_str(), ios::out);
   if (output == NULL) {
-    eLog() << Verbose(0) << "Unable to open output matrix file " << line.str() << "!" << endl;
+    DoeLog(0) && (eLog()<< Verbose(0) << "Unable to open output matrix file " << line.str() << "!" << endl);
     performCriticalExit();
     return false;
@@ -664,5 +664,5 @@
       int j = Indices[ FragmentNr ][l];
       if (j > RowCounter[MatrixCounter]) {
-        eLog() << Verbose(0) << "Current force index " << j << " is greater than " << RowCounter[MatrixCounter] << "!" << endl;
+        DoeLog(0) && (eLog()<< Verbose(0) << "Current force index " << j << " is greater than " << RowCounter[MatrixCounter] << "!" << endl);
         performCriticalExit();
         return false;
@@ -802,5 +802,5 @@
       int j = Indices[ FragmentNr ][l];
       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;
+        DoeLog(0) && (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;
@@ -810,5 +810,5 @@
           int k = Indices[ FragmentNr ][m];
           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;
+            DoeLog(0) && (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;
@@ -863,5 +863,5 @@
               //Log() << Verbose(0) << "Corresponding row index for " << k << " in CurrentFragment is " << m << "." << endl;
               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;
+                DoeLog(0) && (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;
@@ -881,5 +881,5 @@
                   //Log() << Verbose(0) << "Corresponding column index for " << l << " in CurrentFragment is " << n << "." << endl;
                   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;
+                    DoeLog(0) && (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 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/periodentafel.cpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -314,5 +314,5 @@
 
   if (!otherstatus)
-    eLog() << Verbose(2) << "Something went wrong while parsing the other databases!" << endl;
+    DoeLog(2) && (eLog()<< Verbose(2) << "Something went wrong while parsing the other databases!" << endl);
 
   return status;
Index: src/stackclass.hpp
===================================================================
--- src/stackclass.hpp	(revision 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/stackclass.hpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -72,5 +72,5 @@
     return true;
   } else {
-    eLog() << Verbose(1) << "Stack is full, " << "Stack: CurrentLastEntry " << CurrentLastEntry<< "\tCurrentFirstEntry " << CurrentFirstEntry << "\tNextFreeField " << NextFreeField << "\tEntryCount " << EntryCount << "!" << endl;
+    DoeLog(1) && (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(1) << "Stack's field is empty!" << endl;
+      DoeLog(1) && (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(1) << "Stack is empty!" << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Stack is empty!" << endl);
   return Walker;
 };
@@ -111,10 +111,10 @@
     StackList[CurrentLastEntry] = NULL;
     if (Walker == NULL)
-      eLog() << Verbose(1) << "Stack's field is empty!" << endl;
+      DoeLog(1) && (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(1) << "Stack is empty!" << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Stack is empty!" << endl);
   }
   return Walker;
@@ -151,5 +151,5 @@
     } while (i!=NextFreeField);
   else
-    eLog() << Verbose(1) << "Stack is already empty!" << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Stack is already empty!" << endl);
   if (found) {
     NextFreeField = CurrentLastEntry;
Index: src/tesselation.cpp
===================================================================
--- src/tesselation.cpp	(revision 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/tesselation.cpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -55,5 +55,5 @@
   //Log() << Verbose(0) << "Erasing point nr. " << Nr << "." << endl;
   if (!lines.empty())
-    eLog() << Verbose(2) << "Memory Leak! I " << *this << " am still connected to some lines." << endl;
+    DoeLog(2) && (eLog()<< Verbose(2) << "Memory Leak! I " << *this << " am still connected to some lines." << endl);
   node = NULL;
 };
@@ -188,5 +188,5 @@
   }
   if (!triangles.empty())
-    eLog() << Verbose(2) << "Memory Leak! I " << *this << " am still connected to some triangles." << endl;
+    DoeLog(2) && (eLog()<< Verbose(2) << "Memory Leak! I " << *this << " am still connected to some triangles." << endl);
 };
 
@@ -226,5 +226,5 @@
   // get the two triangles
   if (triangles.size() != 2) {
-    eLog() << Verbose(0) << "Baseline " << *this << " is connected to less than two triangles, Tesselation incomplete!" << endl;
+    DoeLog(0) && (eLog()<< Verbose(0) << "Baseline " << *this << " is connected to less than two triangles, Tesselation incomplete!" << endl);
     return true;
   }
@@ -252,5 +252,5 @@
       BaseLineNormal.CopyVector(&runner->second->NormalVector);   // yes, copy second on top of first
     else {
-      eLog() << Verbose(0) << "Triangle " << *runner->second << " has zero normal vector!" << endl;
+      DoeLog(0) && (eLog()<< Verbose(0) << "Triangle " << *runner->second << " has zero normal vector!" << endl);
     }
     node = runner->second->GetThirdEndpoint(this);
@@ -263,5 +263,5 @@
       i++;
     } else {
-      eLog() << Verbose(1) << "I cannot find third node in triangle, something's wrong." << endl;
+      DoeLog(1) && (eLog()<< Verbose(1) << "I cannot find third node in triangle, something's wrong." << endl);
       return true;
     }
@@ -368,5 +368,5 @@
   }
   if (Counter < 3) {
-    eLog() << Verbose(0) << "We have a triangle with only two distinct endpoints!" << endl;
+    DoeLog(0) && (eLog()<< Verbose(0) << "We have a triangle with only two distinct endpoints!" << endl);
     performCriticalExit();
   }
@@ -430,5 +430,5 @@
 
   if (!Intersection->GetIntersectionWithPlane(&NormalVector, endpoints[0]->node->node, MolCenter, x)) {
-    eLog() << Verbose(1) << "Alas! Intersection with plane failed - at least numerically - the intersection is not on the plane!" << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Alas! Intersection with plane failed - at least numerically - the intersection is not on the plane!" << endl);
     return false;
   }
@@ -726,5 +726,5 @@
       Runner[i]++;
       if (Runner[i] == endpoints.end()) {
-        eLog() << Verbose(0) << "There are less than three endpoints in the polygon!" << endl;
+        DoeLog(0) && (eLog()<< Verbose(0) << "There are less than three endpoints in the polygon!" << endl);
         performCriticalExit();
       }
@@ -1072,5 +1072,5 @@
       runner->second = NULL;
     } else
-      eLog() << Verbose(1) << "The triangle " << runner->first << " has already been free'd." << endl;
+      DoeLog(1) && (eLog()<< Verbose(1) << "The triangle " << runner->first << " has already been free'd." << endl);
   }
   Log() << Verbose(0) << "This envelope was written to file " << TriangleFilesWritten << " times(s)." << endl;
@@ -1325,5 +1325,5 @@
   else
     {
-      eLog() << Verbose(0) << "No starting triangle found." << endl;
+      DoeLog(0) && (eLog()<< Verbose(0) << "No starting triangle found." << endl);
     }
 }
@@ -1524,5 +1524,5 @@
           TrianglesOnBoundaryCount++;
         } else {
-          eLog() << Verbose(2) << "I could not determine a winner for this baseline " << *(baseline->second) << "." << endl;
+          DoeLog(2) && (eLog()<< Verbose(2) << "I could not determine a winner for this baseline " << *(baseline->second) << "." << endl);
         }
 
@@ -1617,5 +1617,5 @@
             if (NewLines[j]->IsConnectedTo(BLS[0])) {
               if (n>2) {
-                eLog() << Verbose(2) << BLS[0] << " connects to all of the new lines?!" << endl;
+                DoeLog(2) && (eLog()<< Verbose(2) << BLS[0] << " connects to all of the new lines?!" << endl);
                 return false;
               } else
@@ -1634,5 +1634,5 @@
       }
     } else { // something is wrong with FindClosestTriangleToPoint!
-      eLog() << Verbose(1) << "The closest triangle did not produce an intersection!" << endl;
+      DoeLog(1) && (eLog()<< Verbose(1) << "The closest triangle did not produce an intersection!" << endl);
       return false;
     }
@@ -1737,5 +1737,5 @@
           OpenLines.erase(CandidateLine);
         } else {
-          eLog() << Verbose(1) << "Line exists and is attached to less than two triangles, but not in OpenLines!" << endl;
+          DoeLog(1) && (eLog()<< Verbose(1) << "Line exists and is attached to less than two triangles, but not in OpenLines!" << endl);
         }
 
@@ -1843,5 +1843,5 @@
       triangle->lines[i] = NULL;  // free'd or not: disconnect
     } else
-      eLog() << Verbose(1) << "This line " << i << " has already been free'd." << endl;
+      DoeLog(1) && (eLog()<< Verbose(1) << "This line " << i << " has already been free'd." << endl);
   }
 
@@ -1897,8 +1897,8 @@
       line->endpoints[i] = NULL;  // free'd or not: disconnect
     } else
-      eLog() << Verbose(1) << "Endpoint " << i << " has already been free'd." << endl;
+      DoeLog(1) && (eLog()<< Verbose(1) << "Endpoint " << i << " has already been free'd." << endl);
   }
   if (!line->triangles.empty())
-    eLog() << Verbose(2) << "Memory Leak! I " << *line << " am still connected to some triangles." << endl;
+    DoeLog(2) && (eLog()<< Verbose(2) << "Memory Leak! I " << *line << " am still connected to some triangles." << endl);
 
   if (LinesOnBoundary.erase(line->Nr))
@@ -2073,5 +2073,5 @@
           }
         } else {
-          eLog() << Verbose(1) << "The current cell " << LC->n[0] << "," << LC->n[1] << "," << LC->n[2] << " is invalid!" << endl;
+          DoeLog(1) && (eLog()<< Verbose(1) << "The current cell " << LC->n[0] << "," << LC->n[1] << "," << LC->n[2] << " is invalid!" << endl);
         }
       }
@@ -2217,5 +2217,5 @@
 //            if (fabs(OldSphereCenter.ScalarProduct(&SearchDirection)) > HULLEPSILON) {
 //              // rotated the wrong way!
-//              eLog() << Verbose(1) << "SearchDirection and RelativeOldSphereCenter are still not orthogonal!" << endl;
+//              DoeLog(1) && (eLog()<< Verbose(1) << "SearchDirection and RelativeOldSphereCenter are still not orthogonal!" << endl);
 //            }
 //
@@ -2274,5 +2274,5 @@
 //          }
 //        } else {
-//          eLog() << Verbose(2) << "Baseline is connected to two triangles already?" << endl;
+//          DoeLog(2) && (eLog()<< Verbose(2) << "Baseline is connected to two triangles already?" << endl);
 //        }
 //      } else {
@@ -2281,5 +2281,5 @@
 //    }
 //  } else {
-//    eLog() << Verbose(1) << "Could not find the TesselPoint " << *ThirdNode << "." << endl;
+//    DoeLog(1) && (eLog()<< Verbose(1) << "Could not find the TesselPoint " << *ThirdNode << "." << endl);
 //  }
 //
@@ -2347,5 +2347,5 @@
     if (fabs(RelativeSphereCenter.ScalarProduct(&SearchDirection)) > HULLEPSILON) {
       // rotated the wrong way!
-      eLog() << Verbose(1) << "SearchDirection and RelativeOldSphereCenter are still not orthogonal!" << endl;
+      DoeLog(1) && (eLog()<< Verbose(1) << "SearchDirection and RelativeOldSphereCenter are still not orthogonal!" << endl);
     }
 
@@ -2358,5 +2358,5 @@
 
   if (CandidateLine.pointlist.empty()) {
-    eLog() << Verbose(2) << "Could not find a suitable candidate." << endl;
+    DoeLog(2) && (eLog()<< Verbose(2) << "Could not find a suitable candidate." << endl);
     return false;
   }
@@ -2400,5 +2400,5 @@
 //          CandidateLine.ShortestAngle = ShortestAngle;
 //        } else {
-////          eLog() << Verbose(1) << "This triangle consisting of ";
+////          DoeLog(1) && (eLog()<< Verbose(1) << "This triangle consisting of ");
 ////          Log() << Verbose(0) << *(*it)->point << ", ";
 ////          Log() << Verbose(0) << *BaseRay->endpoints[0]->node << " and ";
@@ -2421,5 +2421,5 @@
 //
 //          } else {
-////            eLog() << Verbose(1) << "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;
+////            DoeLog(1) && (eLog()<< Verbose(1) << "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;
 //          }
@@ -2437,5 +2437,5 @@
 //    BaseRay = BLS[0];
 //    if ((BTS != NULL) && (BTS->NormalVector.NormSquared() < MYEPSILON)) {
-//      eLog() << Verbose(1) << "Triangle " << *BTS << " has zero normal vector!" << endl;
+//      DoeLog(1) && (eLog()<< Verbose(1) << "Triangle " << *BTS << " has zero normal vector!" << endl);
 //      exit(255);
 //    }
@@ -2635,5 +2635,5 @@
     BaseLineNormal.Zero();
     if (Base->triangles.size() < 2) {
-      eLog() << Verbose(1) << "Less than two triangles are attached to this baseline!" << endl;
+      DoeLog(1) && (eLog()<< Verbose(1) << "Less than two triangles are attached to this baseline!" << endl);
       return 0.;
     }
@@ -2674,5 +2674,5 @@
   BaseLineNormal.Zero();
   if (Base->triangles.size() < 2) {
-    eLog() << Verbose(1) << "Less than two triangles are attached to this baseline!" << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Less than two triangles are attached to this baseline!" << endl);
     return NULL;
   }
@@ -2710,15 +2710,15 @@
   // check whether everything is in place to create new lines and triangles
   if (i<4) {
-    eLog() << Verbose(1) << "We have not gathered enough baselines!" << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "We have not gathered enough baselines!" << endl);
     return NULL;
   }
   for (int j=0;j<4;j++)
     if (OldLines[j] == NULL) {
-      eLog() << Verbose(1) << "We have not gathered enough baselines!" << endl;
+      DoeLog(1) && (eLog()<< Verbose(1) << "We have not gathered enough baselines!" << endl);
       return NULL;
     }
   for (int j=0;j<2;j++)
     if (OldPoints[j] == NULL) {
-      eLog() << Verbose(1) << "We have not gathered enough endpoints!" << endl;
+      DoeLog(1) && (eLog()<< Verbose(1) << "We have not gathered enough endpoints!" << endl);
       return NULL;
     }
@@ -2764,5 +2764,5 @@
     Log() << Verbose(0) << "INFO: Created new triangle " << *BTS << "." << endl;
   } else {
-    eLog() << Verbose(0) << "The four old lines do not connect, something's utterly wrong here!" << endl;
+    DoeLog(0) && (eLog()<< Verbose(0) << "The four old lines do not connect, something's utterly wrong here!" << endl);
     return NULL;
   }
@@ -2795,5 +2795,5 @@
       N[i] = LC->n[i];
   } else {
-    eLog() << Verbose(1) << "Point " << *a << " is not found in cell " << LC->index << "." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Point " << *a << " is not found in cell " << LC->index << "." << endl);
     return;
   }
@@ -2935,5 +2935,5 @@
     // test whether old center is on the band's plane
     if (fabs(RelativeOldSphereCenter.ScalarProduct(&CirclePlaneNormal)) > HULLEPSILON) {
-      eLog() << Verbose(1) << "Something's very wrong here: RelativeOldSphereCenter is not on the band's plane as desired by " << fabs(RelativeOldSphereCenter.ScalarProduct(&CirclePlaneNormal)) << "!" << endl;
+      DoeLog(1) && (eLog()<< Verbose(1) << "Something's very wrong here: RelativeOldSphereCenter is not on the band's plane as desired by " << fabs(RelativeOldSphereCenter.ScalarProduct(&CirclePlaneNormal)) << "!" << endl);
       RelativeOldSphereCenter.ProjectOntoPlane(&CirclePlaneNormal);
     }
@@ -2945,5 +2945,5 @@
       Log() << Verbose(1) << "INFO: SearchDirection is " << SearchDirection << "." << endl;
       if (fabs(RelativeOldSphereCenter.ScalarProduct(&SearchDirection)) > HULLEPSILON) {  // rotated the wrong way!
-        eLog() << Verbose(1) << "SearchDirection and RelativeOldSphereCenter are not orthogonal!" << endl;
+        DoeLog(1) && (eLog()<< Verbose(1) << "SearchDirection and RelativeOldSphereCenter are not orthogonal!" << endl);
       }
 
@@ -2954,5 +2954,5 @@
         //Log() << Verbose(1) << "INFO: Center cell is " << N[0] << ", " << N[1] << ", " << N[2] << " with No. " << LC->index << "." << endl;
       } else {
-        eLog() << Verbose(1) << "Vector " << CircleCenter << " is outside of LinkedCell's bounding box." << endl;
+        DoeLog(1) && (eLog()<< Verbose(1) << "Vector " << CircleCenter << " is outside of LinkedCell's bounding box." << endl);
         return;
       }
@@ -2993,5 +2993,5 @@
                       otherradius = CandidateLine.BaseLine->endpoints[1]->node->node->DistanceSquared(&NewPlaneCenter);
                       if (fabs(radius - otherradius) > HULLEPSILON) {
-                        eLog() << Verbose(1) << "Distance to center of circumcircle is not the same from each corner of the triangle: " << fabs(radius-otherradius) << endl;
+                        DoeLog(1) && (eLog()<< Verbose(1) << "Distance to center of circumcircle is not the same from each corner of the triangle: " << fabs(radius-otherradius) << endl);
                       }
                       // construct both new centers
@@ -3060,5 +3060,5 @@
           }
     } else {
-      eLog() << Verbose(1) << "The projected center of the old sphere has radius " << radius << " instead of " << CircleRadius << "." << endl;
+      DoeLog(1) && (eLog()<< Verbose(1) << "The projected center of the old sphere has radius " << radius << " instead of " << CircleRadius << "." << endl);
     }
   } else {
@@ -3119,5 +3119,5 @@
 
   if (LinesOnBoundary.empty()) {
-    eLog() << Verbose(1) << "There is no tesselation structure to compare the point with, please create one first." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "There is no tesselation structure to compare the point with, please create one first." << endl);
     return NULL;
   }
@@ -3146,5 +3146,5 @@
           }
         } else {
-          eLog() << Verbose(1) << "The current cell " << LC->n[0] << "," << LC->n[1] << "," << LC->n[2] << " is invalid!" << endl;
+          DoeLog(1) && (eLog()<< Verbose(1) << "The current cell " << LC->n[0] << "," << LC->n[1] << "," << LC->n[2] << " is invalid!" << endl);
         }
       }
@@ -3152,5 +3152,5 @@
   // check whether we found some points
   if (points->empty()) {
-    eLog() << Verbose(1) << "There is no nearest point: too far away from the surface." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "There is no nearest point: too far away from the surface." << endl);
     delete(points);
     return NULL;
@@ -3171,5 +3171,5 @@
   DistanceToPointMap * points = FindClosestBoundaryPointsToVector(x,LC);
   if (points == NULL) {
-    eLog() << Verbose(1) << "There is no nearest point: too far away from the surface." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "There is no nearest point: too far away from the surface." << endl);
     return NULL;
   }
@@ -3237,5 +3237,5 @@
 	DistanceToPointMap * points = FindClosestBoundaryPointsToVector(x,LC);
   if (points == NULL) {
-    eLog() << Verbose(1) << "There is no nearest point: too far away from the surface." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "There is no nearest point: too far away from the surface." << endl);
     return NULL;
   }
@@ -3286,5 +3286,5 @@
         const double distance = BaseLineIntersection.NormSquared();
         if (Center.NormSquared() > BaseLine.NormSquared()) {
-          eLog() << Verbose(0) << "Algorithmic error: In second case we have intersection outside of baseline!" << endl;
+          DoeLog(0) && (eLog()<< Verbose(0) << "Algorithmic error: In second case we have intersection outside of baseline!" << endl);
         }
         if ((ClosestLines.empty()) || (distance < MinDistance)) {
@@ -3485,5 +3485,5 @@
     ReferencePoint = PointRunner->second;
   } else {
-    eLog() << Verbose(2) << "GetAllConnectedPoints() could not find the BoundaryPoint belonging to " << *Point << "." << endl;
+    DoeLog(2) && (eLog()<< Verbose(2) << "GetAllConnectedPoints() could not find the BoundaryPoint belonging to " << *Point << "." << endl);
     ReferencePoint = NULL;
   }
@@ -3517,5 +3517,5 @@
 
   if (connectedPoints->empty()) { // if have not found any points
-    eLog() << Verbose(1) << "We have not found any connected points to " << *Point<< "." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "We have not found any connected points to " << *Point<< "." << endl);
     return NULL;
   }
@@ -3550,5 +3550,5 @@
 
   if (SetOfNeighbours == NULL) {
-    eLog() << Verbose(2) << "Could not find any connected points!" << endl;
+    DoeLog(2) && (eLog()<< Verbose(2) << "Could not find any connected points!" << endl);
     delete(connectedCircle);
     return NULL;
@@ -3561,5 +3561,5 @@
       PlaneNormal.AddVector(&(*Runner)->NormalVector);
   } else {
-    eLog() << Verbose(0) << "Could not find any triangles for point " << *Point << "." << endl;
+    DoeLog(0) && (eLog()<< Verbose(0) << "Could not find any triangles for point " << *Point << "." << endl);
     performCriticalExit();
   }
@@ -3580,5 +3580,5 @@
     AngleZero.ProjectOntoPlane(&PlaneNormal);
     if (AngleZero.NormSquared() < MYEPSILON) {
-      eLog() << Verbose(0) << "CRITIAL: AngleZero is 0 even with alternative reference. The algorithm has to be changed here!" << endl;
+      DoeLog(0) && (eLog()<< Verbose(0) << "CRITIAL: AngleZero is 0 even with alternative reference. The algorithm has to be changed here!" << endl);
       performCriticalExit();
     }
@@ -3631,5 +3631,5 @@
 
   if (SetOfNeighbours == NULL) {
-    eLog() << Verbose(2) << "Could not find any connected points!" << endl;
+    DoeLog(2) && (eLog()<< Verbose(2) << "Could not find any connected points!" << endl);
     delete(connectedCircle);
     return NULL;
@@ -3685,5 +3685,5 @@
     AngleZero.ProjectOntoPlane(&PlaneNormal);
     if (AngleZero.NormSquared() < MYEPSILON) {
-      eLog() << Verbose(0) << "CRITIAL: AngleZero is 0 even with alternative reference. The algorithm has to be changed here!" << endl;
+      DoeLog(0) && (eLog()<< Verbose(0) << "CRITIAL: AngleZero is 0 even with alternative reference. The algorithm has to be changed here!" << endl);
       performCriticalExit();
     }
@@ -3708,5 +3708,5 @@
     InserterTest = anglesOfPoints.insert(pair<double, TesselPoint*>(angle, (*listRunner)));
     if (!InserterTest.second) {
-      eLog() << Verbose(0) << "GetCircleOfSetOfPoints() got two atoms with same angle: " << *((InserterTest.first)->second) << " and " << (*listRunner) << endl;
+      DoeLog(0) && (eLog()<< Verbose(0) << "GetCircleOfSetOfPoints() got two atoms with same angle: " << *((InserterTest.first)->second) << " and " << (*listRunner) << endl);
       performCriticalExit();
     }
@@ -3748,5 +3748,5 @@
     ReferencePoint = PointRunner->second;
   } else {
-    eLog() << Verbose(1) << "GetPathOfConnectedPoints() could not find the BoundaryPoint belonging to " << *Point << "." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "GetPathOfConnectedPoints() could not find the BoundaryPoint belonging to " << *Point << "." << endl);
     return NULL;
   }
@@ -3765,5 +3765,5 @@
       LineRunner = TouchedLine.find(runner->second);
       if (LineRunner == TouchedLine.end()) {
-        eLog() << Verbose(1) << "I could not find " << *runner->second << " in the touched list." << endl;
+        DoeLog(1) && (eLog()<< Verbose(1) << "I could not find " << *runner->second << " in the touched list." << endl);
       } else if (!LineRunner->second) {
         LineRunner->second = true;
@@ -3795,5 +3795,5 @@
                 }
               } else {
-                eLog() << Verbose(1) << "I could not find " << *triangle << " in the touched list." << endl;
+                DoeLog(1) && (eLog()<< Verbose(1) << "I could not find " << *triangle << " in the touched list." << endl);
                 triangle = NULL;
               }
@@ -3812,5 +3812,5 @@
           LineRunner = TouchedLine.find(CurrentLine);
           if (LineRunner == TouchedLine.end())
-            eLog() << Verbose(1) << "I could not find " << *CurrentLine << " in the touched list." << endl;
+            DoeLog(1) && (eLog()<< Verbose(1) << "I could not find " << *CurrentLine << " in the touched list." << endl);
           else
             LineRunner->second = true;
@@ -3830,5 +3830,5 @@
     }
   } else {
-    eLog() << Verbose(1) << "There are no lines attached to " << *ReferencePoint << "." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "There are no lines attached to " << *ReferencePoint << "." << endl);
   }
 
@@ -3910,5 +3910,5 @@
 
   if (Point == NULL) {
-    eLog() << Verbose(1) << "Point given is NULL." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Point given is NULL." << endl);
   } else {
     // go through its lines and insert all triangles
@@ -3942,5 +3942,5 @@
 
   if (point == NULL) {
-    eLog() << Verbose(1) << "Cannot remove the point " << point << ", it's NULL!" << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Cannot remove the point " << point << ", it's NULL!" << endl);
     return 0.;
   } else
@@ -3952,5 +3952,5 @@
   // get list of connected points
   if (point->lines.empty()) {
-    eLog() << Verbose(1) << "Cannot remove the point " << *point << ", it's connected to no lines!" << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Cannot remove the point " << *point << ", it's connected to no lines!" << endl);
     return 0.;
   }
@@ -4033,5 +4033,5 @@
         MiddleNode = EndNode;
         if (MiddleNode == connectedPath->end()) {
-          eLog() << Verbose(0) << "CRITICAL: Could not find a smallest angle!" << endl;
+          DoeLog(0) && (eLog()<< Verbose(0) << "CRITICAL: Could not find a smallest angle!" << endl);
           performCriticalExit();
         }
@@ -4052,5 +4052,5 @@
         triangle = GetPresentTriangle(TriangleCandidates);
         if (triangle != NULL) {
-          eLog() << Verbose(0) << "New triangle already present, skipping!" << endl;
+          DoeLog(0) && (eLog()<< Verbose(0) << "New triangle already present, skipping!" << endl);
           StartNode++;
           MiddleNode++;
@@ -4090,5 +4090,5 @@
           break;
         } else if (connectedPath->size() < 2) { // something's gone wrong!
-          eLog() << Verbose(0) << "CRITICAL: There are only two endpoints left!" << endl;
+          DoeLog(0) && (eLog()<< Verbose(0) << "CRITICAL: There are only two endpoints left!" << endl);
           performCriticalExit();
         } else {
@@ -4243,5 +4243,5 @@
     }
     default:
-      eLog() << Verbose(0) << "Number of wildcards is greater than 3, cannot happen!" << endl;
+      DoeLog(0) && (eLog()<< Verbose(0) << "Number of wildcards is greater than 3, cannot happen!" << endl);
       performCriticalExit();
       break;
@@ -4296,5 +4296,5 @@
   // sanity check
   if (LinesOnBoundary.empty()) {
-    eLog() << Verbose(2) << "FindAllDegeneratedTriangles() was called without any tesselation structure.";
+    DoeLog(2) && (eLog()<< Verbose(2) << "FindAllDegeneratedTriangles() was called without any tesselation structure.");
     return DegeneratedLines;
   }
@@ -4320,5 +4320,5 @@
       Log() << Verbose(0) << *Line1->second << " => " << *Line2->second << endl;
     else
-      eLog() << Verbose(1) << "Either " << (*it).first << " or " << (*it).second << " are not in LinesOnBoundary!" << endl;
+      DoeLog(1) && (eLog()<< Verbose(1) << "Either " << (*it).first << " or " << (*it).second << " are not in LinesOnBoundary!" << endl);
   }
 
@@ -4480,5 +4480,5 @@
     NearestBoundaryPoint = PointRunner->second;
   } else {
-    eLog() << Verbose(1) << "I cannot find the boundary point." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "I cannot find the boundary point." << endl);
     return;
   }
@@ -4548,5 +4548,5 @@
     if ((BTS->lines[i]->ContainsBoundaryPoint(BestLine->endpoints[0])) && (BTS->lines[i]->ContainsBoundaryPoint(BestLine->endpoints[1]))) {
       if (BestLine == BTS->lines[i]){
-        eLog() << Verbose(0) << "BestLine is same as found line, something's wrong here!" << endl;
+        DoeLog(0) && (eLog()<< Verbose(0) << "BestLine is same as found line, something's wrong here!" << endl);
         performCriticalExit();
       }
@@ -4740,5 +4740,5 @@
     // connections to either polygon ...
     if (T->size() % 2 != 0) {
-      eLog() << Verbose(0) << " degenerated polygon contains an odd number of triangles, probably contains bridging non-degenerated ones, too!" << endl;
+      DoeLog(0) && (eLog()<< Verbose(0) << " degenerated polygon contains an odd number of triangles, probably contains bridging non-degenerated ones, too!" << endl);
       performCriticalExit();
     }
@@ -4775,5 +4775,5 @@
       AddTesselationLine(TPS[1], TPS[2], 2);
       if (TriangleNrs.empty())
-        eLog() << Verbose(0) << "No more free triangle numbers!" << endl;
+        DoeLog(0) && (eLog()<< Verbose(0) << "No more free triangle numbers!" << endl);
       BTS = new BoundaryTriangleSet(BLS, TriangleNrs.top()); // copy triangle ...
       AddTesselationTriangle(); // ... and add
@@ -4784,5 +4784,5 @@
     }
     if (!TriangleNrs.empty()) {
-      eLog() << Verbose(0) << "There have been less triangles created than removed!" << endl;
+      DoeLog(0) && (eLog()<< Verbose(0) << "There have been less triangles created than removed!" << endl);
     }
     delete(T);  // remove the triangleset
Index: src/tesselationhelpers.cpp
===================================================================
--- src/tesselationhelpers.cpp	(revision 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/tesselationhelpers.cpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -81,5 +81,5 @@
 
   if (fabs(m11) < MYEPSILON)
-    eLog() << Verbose(1) << "three points are colinear." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "three points are colinear." << endl);
 
   center->x[0] =  0.5 * m12/ m11;
@@ -88,5 +88,5 @@
 
   if (fabs(a.Distance(center) - RADIUS) > MYEPSILON)
-    eLog() << Verbose(1) << "The given center is further way by " << fabs(a.Distance(center) - RADIUS) << " from a than RADIUS." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "The given center is further way by " << fabs(a.Distance(center) - RADIUS) << " from a than RADIUS." << endl);
 
   gsl_matrix_free(A);
@@ -192,5 +192,5 @@
   //Log() << Verbose(1) << "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(1) << "GetCenterofCircumcircle: Sum of angles " << (alpha+beta+gamma)/M_PI*180. << " > 180 degrees by " << fabs(M_PI - alpha - beta - gamma)/M_PI*180. << "!" << endl;
+    DoeLog(1) && (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);
   }
 
@@ -236,5 +236,5 @@
   // test whether new center is on the parameter circle's plane
   if (fabs(helper.ScalarProduct(&CirclePlaneNormal)) > HULLEPSILON) {
-    eLog() << Verbose(1) << "Something's very wrong here: NewSphereCenter is not on the band's plane as desired by " <<fabs(helper.ScalarProduct(&CirclePlaneNormal))  << "!" << endl;
+    DoeLog(1) && (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);
   }
@@ -242,5 +242,5 @@
   // test whether the new center vector has length of CircleRadius
   if (fabs(radius - CircleRadius) > HULLEPSILON)
-    eLog() << Verbose(1) << "The projected center of the new sphere has radius " << radius << " instead of " << CircleRadius << "." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "The projected center of the new sphere has radius " << radius << " instead of " << CircleRadius << "." << endl);
   alpha = helper.Angle(&RelativeOldSphereCenter);
   // make the angle unique by checking the halfplanes/search direction
@@ -512,5 +512,5 @@
 //  Vector BaseLineVector, OrthogonalVector, helper;
 //  if (candidate1->BaseLine != candidate2->BaseLine) {  // sanity check
-//    eLog() << Verbose(1) << "sortCandidates was called for two different baselines: " << candidate1->BaseLine << " and " << candidate2->BaseLine << "." << endl;
+//    DoeLog(1) && (eLog()<< Verbose(1) << "sortCandidates was called for two different baselines: " << candidate1->BaseLine << " and " << candidate2->BaseLine << "." << endl);
 //    //return false;
 //    exit(1);
@@ -764,5 +764,5 @@
     }
   } else {
-    eLog() << Verbose(1) << "Given vrmlfile is " << vrmlfile << "." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Given vrmlfile is " << vrmlfile << "." << endl);
   }
   delete(center);
@@ -839,5 +839,5 @@
     *rasterfile << "9\n#  terminating special property\n";
   } else {
-    eLog() << Verbose(1) << "Given rasterfile is " << rasterfile << "." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Given rasterfile is " << rasterfile << "." << endl);
   }
   IncludeSphereinRaster3D(rasterfile, Tess, cloud);
@@ -951,5 +951,5 @@
   // check number of endpoints in *P
   if (P->endpoints.size() != 4) {
-    eLog() << Verbose(1) << "CountTrianglePairContainingPolygon works only on polygons with 4 nodes!" << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "CountTrianglePairContainingPolygon works only on polygons with 4 nodes!" << endl);
     return 0;
   }
@@ -957,5 +957,5 @@
   // check number of triangles in *T
   if (T->size() < 2) {
-    eLog() << Verbose(1) << "Not enough triangles to have pairs!" << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "Not enough triangles to have pairs!" << endl);
     return 0;
   }
Index: src/triangleintersectionlist.cpp
===================================================================
--- src/triangleintersectionlist.cpp	(revision 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/triangleintersectionlist.cpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -119,5 +119,5 @@
   DistanceToPointMap * points = Tess->FindClosestBoundaryPointsToVector(Point,Vicinity);
   if (points == NULL) {
-    eLog() << Verbose(1) << "There is no nearest point: too far away from the surface." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "There is no nearest point: too far away from the surface." << endl);
     return;
   }
Index: src/unittests/logunittest.cpp
===================================================================
--- src/unittests/logunittest.cpp	(revision 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/unittests/logunittest.cpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -43,8 +43,8 @@
 
   Log() << Verbose(0) << "Output a log message." << endl;
-  eLog() << Verbose(0) << "Output an error message." << endl;
+  DoeLog(0) && (eLog()<< Verbose(0) << "Output an error message." << endl);
   setVerbosity(3);
   Log() << Verbose(4) << "This should not be printed." << endl;
-  eLog() << Verbose(4) << "This should not be printed." << endl;
+  DoeLog(4) && (eLog()<< Verbose(4) << "This should not be printed." << endl);
 };
 
Index: src/vector.cpp
===================================================================
--- src/vector.cpp	(revision 7ee87fc14c8174aaa7e562acd4b38bbed5239316)
+++ src/vector.cpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
@@ -281,5 +281,5 @@
     return true;
   } else {
-    eLog() << Verbose(2) << "Intersection point " << *this << " is not on plane." << endl;
+    DoeLog(2) && (eLog()<< Verbose(2) << "Intersection point " << *this << " is not on plane." << endl);
     return false;
   }
@@ -816,5 +816,5 @@
       x[i] = C.x[i];
   } else {
-    eLog() << Verbose(1) << "inverse of matrix does not exists: det A = " << detA << "." << endl;
+    DoeLog(1) && (eLog()<< Verbose(1) << "inverse of matrix does not exists: det A = " << detA << "." << endl);
   }
 };
@@ -868,5 +868,5 @@
   x2.SubtractVector(y2);
   if ((fabs(x1.Norm()) < MYEPSILON) || (fabs(x2.Norm()) < MYEPSILON) || (fabs(x1.Angle(&x2)) < MYEPSILON)) {
-    eLog() << Verbose(2) << "Given vectors are linear dependent." << endl;
+    DoeLog(2) && (eLog()<< Verbose(2) << "Given vectors are linear dependent." << endl);
     return false;
   }
@@ -902,5 +902,5 @@
   Zero();
   if ((fabs(x1.Norm()) < MYEPSILON) || (fabs(x2.Norm()) < MYEPSILON) || (fabs(x1.Angle(&x2)) < MYEPSILON)) {
-    eLog() << Verbose(2) << "Given vectors are linear dependent." << endl;
+    DoeLog(2) && (eLog()<< Verbose(2) << "Given vectors are linear dependent." << endl);
     return false;
   }
