Index: src/Fragmentation/BondsPerShortestPath.cpp
===================================================================
--- src/Fragmentation/BondsPerShortestPath.cpp	(revision 830b3e93f20a8a96af1fe51d451d4e9fe1756b75)
+++ src/Fragmentation/BondsPerShortestPath.cpp	(revision 8ac66b4e4ec8dfc129dfdf1062fd96a8b51ce2e1)
@@ -99,5 +99,5 @@
 void BondsPerShortestPath::ResetSPList()
 {
-  LOG(0, "Free'ing all found lists and resetting index lists");
+  LOG(1, "INFO: Free'ing all found lists and resetting index lists");
   for(int i=Order;i--;) {
     std::stringstream output;
@@ -141,5 +141,5 @@
   int SP = -1;
 
-  LOG(0, "Starting BFS analysis ...");
+  LOG(0, "INFO: Starting BFS analysis ...");
   for (SP = 0; SP < (Order-1); SP++) {
     {
@@ -162,8 +162,8 @@
       Predecessor = (*CurrentEdge)->leftatom;    // ... and leftatom is predecessor
       AtomKeyNr = Walker->getNr();
-      LOG(0, "Current Walker is: " << *Walker << " with nr " << Walker->getNr() << " and SP of " << SP << ", with " << RemainingWalkers << " remaining walkers on this level.");
+      LOG(1, "INFO: Current Walker is: " << *Walker << " with nr " << Walker->getNr() << " and SP of " << SP << ", with " << RemainingWalkers << " remaining walkers on this level.");
       // check for new sp level
       // go through all its bonds
-      LOG(1, "Going through all bonds of Walker.");
+//      LOG(2, "Going through all bonds of Walker.");
       const BondList& ListOfBonds = Walker->getListOfBonds();
       for (BondList::const_iterator Runner = ListOfBonds.begin();
@@ -181,12 +181,12 @@
             BondsPerSPList[SP+1].push_back(Binder);
             BondsPerSPCount[SP+1]++;
-            LOG(3, "Added its bond to SP list, having now " << BondsPerSPCount[SP+1] << " item(s).");
+            LOG(3, "DEBUG: Added its bond to SP list, having now " << BondsPerSPCount[SP+1] << " item(s).");
           } else {
             if (OtherWalker != Predecessor)
-              LOG(3, "Not passing on, as index of " << *OtherWalker << " " << OtherWalker->GetTrueFather()->getNr() << " is smaller than that of Root " << RootKeyNr << ".");
+              LOG(3, "DEBUG: Not passing on, as index of " << *OtherWalker << " " << OtherWalker->GetTrueFather()->getNr() << " is smaller than that of Root " << RootKeyNr << ".");
             else
-              LOG(3, "This is my predecessor " << *Predecessor << ".");
+              LOG(3, "DEBUG: This is my predecessor " << *Predecessor << ".");
           }
-        } else LOG(2, "Is not in the restricted keyset or skipping hydrogen " << *OtherWalker << ".");
+        } else LOG(2, "DEBUG: Is not in the restricted keyset or skipping hydrogen " << *OtherWalker << ".");
       }
     }
@@ -198,12 +198,15 @@
 void BondsPerShortestPath::OutputSPList()
 {
-  LOG(0, "Printing all found lists.");
+  LOG(2, "DEBUG: Printing all found lists.");
   for(int i=1;i<Order;i++) {    // skip the root edge in the printing
-    LOG(1, "Current SP level is " << i << ".");
+    LOG(2, "\tCurrent SP level is " << i << ".");
+    std::stringstream output;
     for (BondsPerShortestPath::BondsPerSP::const_iterator Binder = BondsPerSPList[i].begin();
         Binder != BondsPerSPList[i].end();
         ++Binder) {
-      LOG(2, **Binder);
-    }
+      output << "\t" << *Binder;
+    }
+    output << std::endl;
+    LOG(2, output.str());
   }
 };
Index: src/Fragmentation/Fragmentation.cpp
===================================================================
--- src/Fragmentation/Fragmentation.cpp	(revision 830b3e93f20a8a96af1fe51d451d4e9fe1756b75)
+++ src/Fragmentation/Fragmentation.cpp	(revision 8ac66b4e4ec8dfc129dfdf1062fd96a8b51ce2e1)
@@ -111,8 +111,8 @@
   switch (treatment) {
     case ExcludeHydrogen:
-      LOG(0, "I will treat hydrogen special.");
+      LOG(1, "INFO: I will treat hydrogen special.");
       break;
     case IncludeHydrogen:
-      LOG(0, "Hydrogen is treated just like the rest of the lot.");
+      LOG(1, "INFO: Hydrogen is treated just like the rest of the lot.");
       break;
     default:
@@ -163,5 +163,5 @@
     FragmentBOSSANOVA(mol, FragmentList, RootStack);
   }
-  LOG(2, "CheckOrder is " << CheckOrder << ".");
+  LOG(3, "DEBUG: CheckOrder is " << CheckOrder << ".");
 
   // ==================================== End of FRAGMENTATION ============================================
@@ -191,5 +191,4 @@
   StoreOrderAtSiteFile(prefix);
 
-  LOG(0, "End of bond fragmentation.");
   return ((int)(!FragmentationToDo)+1);    // 1 - continue, 2 - stop (no fragmentation occured)
 };
@@ -276,5 +275,5 @@
 
       // output resulting number
-      LOG(1, "Number of resulting KeySets is: " << NumMoleculesOfOrder[RootNr] << ".");
+      LOG(1, "INFO: Number of resulting KeySets is: " << NumMoleculesOfOrder[RootNr] << ".");
       if (NumMoleculesOfOrder[RootNr] != 0) {
         NumMolecules = 0;
@@ -289,5 +288,5 @@
   }
   LOG(0, "==============================================================================================================");
-  LOG(1, "Total number of resulting molecules is: " << TotalNumMolecules << ".");
+  LOG(0, "\tTotal number of resulting fragments is: " << TotalNumMolecules << ".");
   LOG(0, "==============================================================================================================");
 
@@ -325,5 +324,5 @@
   }
   FragmentCount = (treatment == ExcludeHydrogen ? mol->getNoNonHydrogen() : mol->getAtomCount()) *(1 << (c*order));
-  LOG(1, "Upper limit for this subgraph is " << FragmentCount << " for "
+  LOG(1, "INFO: Upper limit for this subgraph is " << FragmentCount << " for "
       << mol->getNoNonHydrogen() << " non-H atoms with maximum bond degree of " << c << ".");
   return FragmentCount;
@@ -382,7 +381,7 @@
     if (!status) {
       if (Order == 0)
-        LOG(1, "Single stepping done.");
+        LOG(1, "INFO: Single stepping done.");
       else
-        LOG(1, "Order at every site is already equal or above desired order " << Order << ".");
+        LOG(1, "INFO: Order at every site is already equal or above desired order " << Order << ".");
     }
   }
@@ -405,14 +404,16 @@
   line = path + ORDERATSITEFILE;
   file.open(line.c_str());
-  LOG(1, "Writing OrderAtSite " << ORDERATSITEFILE << " ... ");
+  std::stringstream output;
+  output << "INFO: Writing OrderAtSite " << ORDERATSITEFILE << " ... ";
   if (file.good()) {
     for_each(mol->begin(),mol->end(),bind2nd(mem_fun(&atom::OutputOrder), &file));
     file.close();
-    LOG(1, "done.");
+    output << "done.";
     return true;
   } else {
-    LOG(1, "failed to open file " << line << ".");
+    output << "failed to open file " << line << ".";
     return false;
   }
+  LOG(1, output.str());
 };
 
@@ -427,5 +428,5 @@
 bool Fragmentation::ParseOrderAtSiteFromFile(const std::vector<atomId_t> &atomids, const std::string &path)
 {
-  Info FunctionInfo(__func__);
+//  Info FunctionInfo(__func__);
   typedef unsigned char order_t;
   typedef std::map<atomId_t, order_t> OrderArray_t;
@@ -461,8 +462,7 @@
     //SetAtomValueToIndexedArray( MaxArray, &atom::getNr(), &atom::MaxOrder );
 
-    LOG(1, "\t ... done.");
     status = true;
   } else {
-    LOG(1, "\t ... failed to open file " << line << ".");
+    ELOG(1, "Failed to open OrdersAtSite file " << line << ".");
     status = false;
   }
@@ -496,5 +496,5 @@
 bool Fragmentation::AssignKeySetsToFragment(const Graph &KeySetList, ListOfLocalAtoms_t &ListOfLocalAtoms, Graph &FragmentList, bool FreeList)
 {
-  Info FunctionInfo(__func__);
+//  Info FunctionInfo(__func__);
   bool status = true;
   size_t KeySetCounter = 0;
@@ -502,5 +502,5 @@
   // fill ListOfLocalAtoms if NULL was given
   if (!mol->FillListOfLocalAtoms(ListOfLocalAtoms, mol->getAtomCount())) {
-    LOG(1, "Filling of ListOfLocalAtoms failed.");
+    ELOG(1, "Filling of ListOfLocalAtoms failed.");
     return false;
   }
@@ -520,5 +520,5 @@
     }
   } else
-    LOG(1, "KeySetList is NULL or empty.");
+    ELOG(2, "KeySetList is NULL or empty.");
 
   if (FreeList) {
@@ -536,5 +536,5 @@
 void Fragmentation::TranslateIndicesToGlobalIDs(Graph &FragmentList, int &TotalNumberOfKeySets, Graph &TotalGraph)
 {
-  Info FunctionInfo(__func__);
+//  Info FunctionInfo(__func__);
   for (Graph::iterator runner = FragmentList.begin(); runner != FragmentList.end(); runner++) {
     KeySet TempSet;
Index: src/Fragmentation/PowerSetGenerator.cpp
===================================================================
--- src/Fragmentation/PowerSetGenerator.cpp	(revision 830b3e93f20a8a96af1fe51d451d4e9fe1756b75)
+++ src/Fragmentation/PowerSetGenerator.cpp	(revision 8ac66b4e4ec8dfc129dfdf1062fd96a8b51ce2e1)
@@ -212,5 +212,5 @@
   // creating fragments with the found edge sets  (may be done in reverse order, faster)
   int SP = BondsPerSPList.CountNumbersInBondsList();
-  LOG(0, "Total number of edges is " << SP << ".");
+  LOG(0, "INFO: Total number of edges is " << SP << ".");
   {
     // start with root (push on fragment stack)
Index: src/Graph/BondGraph.cpp
===================================================================
--- src/Graph/BondGraph.cpp	(revision 830b3e93f20a8a96af1fe51d451d4e9fe1756b75)
+++ src/Graph/BondGraph.cpp	(revision 8ac66b4e4ec8dfc129dfdf1062fd96a8b51ce2e1)
@@ -161,8 +161,8 @@
   range<double> MinMaxDistance(0.,0.);
   if (BondLengthMatrix == NULL) {// safety measure if no matrix has been parsed yet
-    LOG(2, "INFO: Using Covalent radii criterion for [min,max) distances.");
+    LOG(5, "DEBUG: Using Covalent radii criterion for [min,max) distances.");
     MinMaxDistance = CovalentMinMaxDistance(Walker, OtherWalker);
   } else {
-    LOG(2, "INFO: Using Covalent radii criterion for [min,max) distances.");
+    LOG(5, "DEBUG: Using tabulated bond table criterion for [min,max) distances.");
     MinMaxDistance = BondLengthMatrixMinMaxDistance(Walker, OtherWalker);
   }
