Index: src/Actions/FragmentationAction/CreateAdjacencyAction.cpp
===================================================================
--- src/Actions/FragmentationAction/CreateAdjacencyAction.cpp	(revision 49c059c36d49bc80016beb5b2ba5a56947f5f28c)
+++ src/Actions/FragmentationAction/CreateAdjacencyAction.cpp	(revision efe5160ad303df71b958a8e888770461a77b5bae)
@@ -141,5 +141,6 @@
                             if (status) { // create bond if distance is smaller
 //                              Log() << Verbose(1) << "Adding Bond between " << *Walker << " and " << *OtherWalker << " in distance " << sqrt(distance) << "." << endl;
-                              bond * const Binder = new bond(Walker->father, OtherWalker->father, 1, BondCount++);
+                              bond * const Binder = new bond(Walker->father, OtherWalker->father, 1);
+                              BondCount++;
                               Walker->father->RegisterBond(WorldTime::getTime(),Binder);
                               OtherWalker->father->RegisterBond(WorldTime::getTime(),Binder);
Index: src/Bond/bond.cpp
===================================================================
--- src/Bond/bond.cpp	(revision 49c059c36d49bc80016beb5b2ba5a56947f5f28c)
+++ src/Bond/bond.cpp	(revision efe5160ad303df71b958a8e888770461a77b5bae)
@@ -34,6 +34,5 @@
   rightatom(NULL),
   HydrogenBond(0),
-  BondDegree(0),
-  nr(-1)
+  BondDegree(0)
 {};
 
@@ -44,10 +43,9 @@
  * \param number increasing index
  */
-bond::bond(atom *left, atom *right, const int degree, const int number) :
+bond::bond(atom *left, atom *right, const int degree) :
   leftatom(left),
   rightatom(right),
   HydrogenBond(0),
-  BondDegree(degree),
-  nr(number)
+  BondDegree(degree)
 {
   if ((left != NULL) && (right != NULL)) {
Index: src/Bond/bond.hpp
===================================================================
--- src/Bond/bond.hpp	(revision 49c059c36d49bc80016beb5b2ba5a56947f5f28c)
+++ src/Bond/bond.hpp	(revision efe5160ad303df71b958a8e888770461a77b5bae)
@@ -41,5 +41,4 @@
   int HydrogenBond;  //!< Number of hydrogen atoms in the bond
   int BondDegree;    //!< single, double, triple, ... bond
-  int nr;           //!< unique number in a molecule, updated by BondGraph::CreateAdjacencyForList()
 
   atom * GetOtherAtom(const ParticleInfo * const Atom) const;
@@ -51,7 +50,6 @@
 
   bond();
-  bond(atom *left, atom *right, const int degree=1, const int number=0);
+  bond(atom *left, atom *right, const int degree=1);
   ~bond();
-
 };
 
Index: src/Graph/BondGraph.hpp
===================================================================
--- src/Graph/BondGraph.hpp	(revision 49c059c36d49bc80016beb5b2ba5a56947f5f28c)
+++ src/Graph/BondGraph.hpp	(revision efe5160ad303df71b958a8e888770461a77b5bae)
@@ -230,5 +230,5 @@
 
       LOG(3, "INFO: Creating bond between atoms " << atom1 << " and " << atom2 << ".");
-      bond * const Binder = new bond(Walker, OtherWalker, 1, -1);
+      bond * const Binder = new bond(Walker, OtherWalker, 1);
       Walker->RegisterBond(WorldTime::getTime(), Binder);
       OtherWalker->RegisterBond(WorldTime::getTime(), Binder);
Index: src/Graph/BreadthFirstSearchAdd.cpp
===================================================================
--- src/Graph/BreadthFirstSearchAdd.cpp	(revision 49c059c36d49bc80016beb5b2ba5a56947f5f28c)
+++ src/Graph/BreadthFirstSearchAdd.cpp	(revision efe5160ad303df71b958a8e888770461a77b5bae)
@@ -75,11 +75,11 @@
       AddedAtomList[OtherAtom->getNr()] = Mol->AddCopyAtom(OtherAtom);
       DoLog(0) && (Log() << Verbose(0) << "Added OtherAtom " << OtherAtom->getName());
-      AddedBondList[Binder->nr] = Mol->CopyBond(AddedAtomList[Walker->getNr()], AddedAtomList[OtherAtom->getNr()], Binder);
-      DoLog(0) && (Log() << Verbose(0) << " and bond " << *(AddedBondList[Binder->nr]) << ", ");
+      AddedBondList[Binder] = Mol->CopyBond(AddedAtomList[Walker->getNr()], AddedAtomList[OtherAtom->getNr()], Binder);
+      DoLog(0) && (Log() << Verbose(0) << " and bond " << *(AddedBondList[Binder]) << ", ");
     } else { // this code should actually never come into play (all GraphEdge::white atoms are not yet present in BondMolecule, that's why they are GraphEdge::white in the first place)
       DoLog(0) && (Log() << Verbose(0) << "Not adding OtherAtom " << OtherAtom->getName());
-      if (AddedBondList[Binder->nr] == NULL) {
-        AddedBondList[Binder->nr] = Mol->CopyBond(AddedAtomList[Walker->getNr()], AddedAtomList[OtherAtom->getNr()], Binder);
-        DoLog(0) && (Log() << Verbose(0) << ", added Bond " << *(AddedBondList[Binder->nr]));
+      if (AddedBondList[Binder] == NULL) {
+        AddedBondList[Binder] = Mol->CopyBond(AddedAtomList[Walker->getNr()], AddedAtomList[OtherAtom->getNr()], Binder);
+        DoLog(0) && (Log() << Verbose(0) << ", added Bond " << *(AddedBondList[Binder]));
       } else
         DoLog(0) && (Log() << Verbose(0) << ", not added Bond ");
@@ -96,7 +96,7 @@
     if (!Binder->Cyclic)
       DoLog(0) && (Log() << Verbose(0) << ", is not part of a cyclic bond, saturating bond with Hydrogen." << endl);
-    if (AddedBondList[Binder->nr] == NULL) {
+    if (AddedBondList[Binder] == NULL) {
       if ((AddedAtomList[OtherAtom->getNr()] != NULL)) { // .. whether we add or saturate
-        AddedBondList[Binder->nr] = Mol->CopyBond(AddedAtomList[Walker->getNr()], AddedAtomList[OtherAtom->getNr()], Binder);
+        AddedBondList[Binder] = Mol->CopyBond(AddedAtomList[Walker->getNr()], AddedAtomList[OtherAtom->getNr()], Binder);
       } else {
 #ifdef ADDHYDROGEN
@@ -114,7 +114,7 @@
   DoLog(3) && (Log() << Verbose(3) << "Not Adding, has already been visited." << endl);
   // This has to be a cyclic bond, check whether it's present ...
-  if (AddedBondList[Binder->nr] == NULL) {
+  if (AddedBondList[Binder] == NULL) {
     if ((Binder != Bond) && (Binder->Cyclic) && (((ShortestPathList[Walker->getNr()] + 1) < BondOrder))) {
-      AddedBondList[Binder->nr] = Mol->CopyBond(AddedAtomList[Walker->getNr()], AddedAtomList[OtherAtom->getNr()], Binder);
+      AddedBondList[Binder] = Mol->CopyBond(AddedAtomList[Walker->getNr()], AddedAtomList[OtherAtom->getNr()], Binder);
     } else { // if it's root bond it has to broken (otherwise we would not create the fragments)
 #ifdef ADDHYDROGEN
Index: src/Graph/BreadthFirstSearchAdd.hpp
===================================================================
--- src/Graph/BreadthFirstSearchAdd.hpp	(revision 49c059c36d49bc80016beb5b2ba5a56947f5f28c)
+++ src/Graph/BreadthFirstSearchAdd.hpp	(revision efe5160ad303df71b958a8e888770461a77b5bae)
@@ -69,5 +69,5 @@
   int ComponentNr;
   std::map<atomId_t, atom *> AddedAtomList;
-  std::map<int, bond *> AddedBondList;
+  std::map<bond *, bond *> AddedBondList; //!< maps from father bond to son
 
   bool IsAngstroem;
Index: src/atom_bondedparticle.cpp
===================================================================
--- src/atom_bondedparticle.cpp	(revision 49c059c36d49bc80016beb5b2ba5a56947f5f28c)
+++ src/atom_bondedparticle.cpp	(revision efe5160ad303df71b958a8e888770461a77b5bae)
@@ -104,5 +104,5 @@
   }
 
-  bond* newBond = new bond((atom*) this, (atom*) Partner, 1, 0);
+  bond* newBond = new bond((atom*) this, (atom*) Partner, 1);
   RegisterBond(_step, newBond);
   Partner->RegisterBond(_step, newBond);
Index: src/molecule.cpp
===================================================================
--- src/molecule.cpp	(revision 49c059c36d49bc80016beb5b2ba5a56947f5f28c)
+++ src/molecule.cpp	(revision efe5160ad303df71b958a8e888770461a77b5bae)
@@ -744,5 +744,5 @@
   ASSERT(FindAtom(atom2->getNr()),"Second atom in bond-creation was not part of molecule");
 
-  Binder = new bond(atom1, atom2, degree, getBondCount());
+  Binder = new bond(atom1, atom2, degree);
   atom1->RegisterBond(WorldTime::getTime(), Binder);
   atom2->RegisterBond(WorldTime::getTime(), Binder);
Index: src/moleculelist.cpp
===================================================================
--- src/moleculelist.cpp	(revision 49c059c36d49bc80016beb5b2ba5a56947f5f28c)
+++ src/moleculelist.cpp	(revision efe5160ad303df71b958a8e888770461a77b5bae)
@@ -512,5 +512,5 @@
       strcpy(PathBackup, path);
     else {
-      DoeLog(0) && (eLog()<< Verbose(0) << "OutputConfigForListOfFragments: NULL default path obtained from config!" << endl);
+      ELOG(0, "OutputConfigForListOfFragments: NULL default path obtained from config!");
       performCriticalExit();
     }
@@ -521,23 +521,30 @@
     }
 
-    // output xyz file
-    FragmentNumber = FixedDigitNumber(ListOfMolecules.size(), FragmentCounter++);
-    FragmentName = prefix + FragmentNumber + ".conf.xyz";
-    outputFragment.open(FragmentName.c_str(), ios::out);
-    DoLog(2) && (Log() << Verbose(2) << "Saving bond fragment No. " << FragmentNumber << "/" << FragmentCounter - 1 << " as XYZ ...");
-    if ((intermediateResult = (*ListRunner)->OutputXYZ(&outputFragment)))
-      DoLog(0) && (Log() << Verbose(0) << " done." << endl);
-    else
-      DoLog(0) && (Log() << Verbose(0) << " failed." << endl);
-    result = result && intermediateResult;
-    outputFragment.close();
-    outputFragment.clear();
-
-    // list atoms in fragment for debugging
-    DoLog(2) && (Log() << Verbose(2) << "Contained atoms: ");
-    for (molecule::const_iterator iter = (*ListRunner)->begin(); iter != (*ListRunner)->end(); ++iter) {
-      DoLog(0) && (Log() << Verbose(0) << (*iter)->getName() << " ");
-    }
-    DoLog(0) && (Log() << Verbose(0) << endl);
+    {
+      // list atoms in fragment for debugging
+      std::stringstream output;
+      output << "Contained atoms: ";
+      for (molecule::const_iterator iter = (*ListRunner)->begin(); iter != (*ListRunner)->end(); ++iter) {
+        output << (*iter)->getName() << " ";
+      }
+      LOG(2, output.str());
+    }
+
+    {
+      // output xyz file
+      FragmentNumber = FixedDigitNumber(ListOfMolecules.size(), FragmentCounter++);
+      FragmentName = prefix + FragmentNumber + ".conf.xyz";
+      outputFragment.open(FragmentName.c_str(), ios::out);
+      std::stringstream output;
+      output << "Saving bond fragment No. " << FragmentNumber << "/" << FragmentCounter - 1 << " as XYZ ... ";
+      if ((intermediateResult = (*ListRunner)->OutputXYZ(&outputFragment)))
+        output << " done.";
+      else
+        output << " failed.";
+      LOG(3, output.str());
+      result = result && intermediateResult;
+      outputFragment.close();
+      outputFragment.clear();
+    }
 
     // center on edge
@@ -554,7 +561,4 @@
     (*ListRunner)->Translate(&BoxDimension);
 
-    // also calculate necessary orbitals
-    //(*ListRunner)->CalculateOrbitals(*World::getInstance().getConfig);
-
     // change path in config
     FragmentName = PathBackup;
@@ -565,23 +569,31 @@
     World::getInstance().getConfig()->SetDefaultPath(FragmentName.c_str());
 
-    // and save as config
-    FragmentName = prefix + FragmentNumber + ".conf";
-    DoLog(2) && (Log() << Verbose(2) << "Saving bond fragment No. " << FragmentNumber << "/" << FragmentCounter - 1 << " as config ...");
-    if ((intermediateResult = World::getInstance().getConfig()->Save(FragmentName.c_str(), (*ListRunner)->elemente, (*ListRunner))))
-      DoLog(0) && (Log() << Verbose(0) << " done." << endl);
-    else
-      DoLog(0) && (Log() << Verbose(0) << " failed." << endl);
-    result = result && intermediateResult;
+    {
+      // and save as config
+      FragmentName = prefix + FragmentNumber + ".conf";
+      std::stringstream output;
+      output << "Saving bond fragment No. " << FragmentNumber << "/" << FragmentCounter - 1 << " as config ... ";
+      if ((intermediateResult = World::getInstance().getConfig()->Save(FragmentName.c_str(), (*ListRunner)->elemente, (*ListRunner))))
+        output << " done.";
+      else
+        output << " failed.";
+      LOG(3, output.str());
+      result = result && intermediateResult;
+    }
 
     // restore old config
     World::getInstance().getConfig()->SetDefaultPath(PathBackup);
 
-    // and save as mpqc input file
-    FragmentName = prefix + FragmentNumber + ".conf";
-    DoLog(2) && (Log() << Verbose(2) << "Saving bond fragment No. " << FragmentNumber << "/" << FragmentCounter - 1 << " as mpqc input ...");
-    if ((intermediateResult = World::getInstance().getConfig()->SaveMPQC(FragmentName.c_str(), (*ListRunner))))
-      DoLog(2) && (Log() << Verbose(2) << " done." << endl);
-    else
-      DoLog(0) && (Log() << Verbose(0) << " failed." << endl);
+    {
+      // and save as mpqc input file
+      stringstream output;
+      FragmentName = prefix + FragmentNumber + ".conf";
+      output << "Saving bond fragment No. " << FragmentNumber << "/" << FragmentCounter - 1 << " as mpqc input ... ";
+      if ((intermediateResult = World::getInstance().getConfig()->SaveMPQC(FragmentName.c_str(), (*ListRunner))))
+        output << " done.";
+      else
+        output << " failed.";
+      LOG(3, output.str());
+    }
 
     result = result && intermediateResult;
@@ -590,11 +602,11 @@
     delete[](FragmentNumber);
   }
-  DoLog(0) && (Log() << Verbose(0) << " done." << endl);
+  LOG(0, "STATUS: done.");
 
   // printing final number
-  DoLog(2) && (Log() << Verbose(2) << "Final number of fragments: " << FragmentCounter << "." << endl);
+  LOG(2, "INFO: Final number of fragments: " << FragmentCounter << ".");
 
   // printing final number
-  DoLog(0) && (Log() << Verbose(0) << "For " << count << " fragments periodic correction would have been necessary." << endl);
+  LOG(2, "INFO: For " << count << " fragments periodic correction would have been necessary.");
 
   // restore cell_size
