Index: src/Actions/FragmentationAction/SubgraphDissectionAction.cpp
===================================================================
--- src/Actions/FragmentationAction/SubgraphDissectionAction.cpp	(revision d4a44c33452f58b4160eb88383f4287dfc249470)
+++ src/Actions/FragmentationAction/SubgraphDissectionAction.cpp	(revision 458c3163eb1df36b974240aa85d9aa341ad4408a)
@@ -74,10 +74,8 @@
   // 0b. remove all bonds and construct a molecule with all atoms
   molecule *mol = World::getInstance().createMolecule();
-  int BondCount = 0;
   {
     vector <atom *> allatoms = World::getInstance().getAllAtoms();
     for(vector<atom *>::iterator AtomRunner = allatoms.begin(); AtomRunner != allatoms.end(); ++AtomRunner) {
-      const BondList& ListOfBonds = (*AtomRunner)->getListOfBonds();
-      BondCount += ListOfBonds.size();
+//      const BondList& ListOfBonds = (*AtomRunner)->getListOfBonds();
 //      for(BondList::iterator BondRunner = ListOfBonds.begin();
 //          !ListOfBonds.empty();
@@ -90,5 +88,5 @@
 
   // 1. create the bond structure of the single molecule
-  if (BondCount == 0) {
+  if (mol->getBondCount() == 0) {
     BondGraph *BG = World::getInstance().getBondGraph();
     if (!BG->CreateAdjacencyForMolecule(mol)) {
Index: src/molecule.cpp
===================================================================
--- src/molecule.cpp	(revision d4a44c33452f58b4160eb88383f4287dfc249470)
+++ src/molecule.cpp	(revision 458c3163eb1df36b974240aa85d9aa341ad4408a)
@@ -56,7 +56,14 @@
 molecule::molecule(const periodentafel * const teil) :
   Observable("molecule"),
-  elemente(teil),  MDSteps(0),  BondCount(0), NoNonHydrogen(0), NoNonBonds(0),
-  NoCyclicBonds(0),  ActiveFlag(false), IndexNr(-1),
-  AtomCount(this,boost::bind(&molecule::doCountAtoms,this),"AtomCount"), last_atom(0)
+  elemente(teil),
+  MDSteps(0),
+  NoNonHydrogen(0),
+  NoNonBonds(0),
+  NoCyclicBonds(0),
+  ActiveFlag(false),
+  IndexNr(-1),
+  AtomCount(this,boost::bind(&molecule::doCountAtoms,this),"AtomCount"),
+  BondCount(this,boost::bind(&molecule::doCountBonds,this),"BondCount"),
+  last_atom(0)
 {
 
@@ -88,4 +95,8 @@
 int molecule::getAtomCount() const{
   return *AtomCount;
+}
+
+int molecule::getBondCount() const{
+  return *BondCount;
 }
 
@@ -729,5 +740,5 @@
   ASSERT(FindAtom(atom2->getNr()),"Second atom in bond-creation was not part of molecule");
 
-  Binder = new bond(atom1, atom2, degree, BondCount++);
+  Binder = new bond(atom1, atom2, degree, getBondCount());
   atom1->RegisterBond(WorldTime::getTime(), Binder);
   atom2->RegisterBond(WorldTime::getTime(), Binder);
@@ -998,4 +1009,22 @@
   return res;
 };
+
+/** Counts the number of present bonds.
+ * \return number of bonds
+ */
+int molecule::doCountBonds() const
+{
+  unsigned int counter = 0;
+  for(molecule::const_iterator AtomRunner = begin(); AtomRunner != end(); ++AtomRunner) {
+    const BondList& ListOfBonds = (*AtomRunner)->getListOfBonds();
+    for(BondList::const_iterator BondRunner = ListOfBonds.begin();
+        BondRunner != ListOfBonds.end();
+        ++BondRunner)
+      if ((*BondRunner)->leftatom == *AtomRunner)
+        counter++;
+  }
+  return counter;
+}
+
 
 /** Returns an index map for two father-son-molecules.
Index: src/molecule.hpp
===================================================================
--- src/molecule.hpp	(revision d4a44c33452f58b4160eb88383f4287dfc249470)
+++ src/molecule.hpp	(revision 458c3163eb1df36b974240aa85d9aa341ad4408a)
@@ -98,10 +98,7 @@
   //bond *last;         //!< end of bond list
   int MDSteps; //!< The number of MD steps in Trajectories
-  //int AtomCount;          //!< number of atoms, brought up-to-date by CountAtoms()
-  int BondCount; //!< number of atoms, brought up-to-date by CountBonds()
   mutable int NoNonHydrogen; //!< number of non-hydrogen atoms in molecule
   mutable int NoNonBonds; //!< number of non-hydrogen bonds in molecule
   mutable int NoCyclicBonds; //!< number of cyclic bonds in molecule, by DepthFirstSearchAnalysis()
-  //double BondDistance; //!< typical bond distance used in CreateAdjacencyList() and furtheron
   bool ActiveFlag; //!< in a MoleculeListClass used to discern active from inactive molecules
   //Vector Center;      //!< Center of molecule in a global box
@@ -111,5 +108,6 @@
 private:
   Formula formula;
-  Cacheable<int> AtomCount;
+  Cacheable<int> AtomCount; //!< number of atoms, brought up-to-date by doCountAtoms()
+  Cacheable<int> BondCount; //!< number of atoms, brought up-to-date by doCountBonds()
   moleculeId_t id;
   atomSet atoms; //<!list of atoms
@@ -131,4 +129,6 @@
   int getAtomCount() const;
   int doCountAtoms();
+  int getBondCount() const;
+  int doCountBonds() const;
   moleculeId_t getId() const;
   void setId(moleculeId_t);
@@ -169,5 +169,4 @@
   bool RemoveBonds(atom *BondPartner);
   bool hasBondStructure() const;
-  unsigned int CountBonds() const;
 
   /// Find atoms.
Index: src/molecule_graph.cpp
===================================================================
--- src/molecule_graph.cpp	(revision d4a44c33452f58b4160eb88383f4287dfc249470)
+++ src/molecule_graph.cpp	(revision 458c3163eb1df36b974240aa85d9aa341ad4408a)
@@ -149,5 +149,4 @@
         delete((*BondRunner));
   }
-  BondCount = 0;
 
   // count atoms in molecule = dimension of matrix (also give each unique name and continuous numbering)
@@ -214,5 +213,5 @@
         }
     delete (LC);
-    DoLog(1) && (Log() << Verbose(1) << "I detected " << BondCount << " bonds in the molecule." << endl);
+    DoLog(1) && (Log() << Verbose(1) << "I detected " << getBondCount() << " bonds in the molecule." << endl);
 
     // correct bond degree by comparing valence and bond degree
@@ -242,21 +241,4 @@
   }
   return false;
-}
-
-/** Counts the number of present bonds.
- * \return number of bonds
- */
-unsigned int molecule::CountBonds() const
-{
-  unsigned int counter = 0;
-  for(molecule::const_iterator AtomRunner = begin(); AtomRunner != end(); ++AtomRunner) {
-    const BondList& ListOfBonds = (*AtomRunner)->getListOfBonds();
-    for(BondList::const_iterator BondRunner = ListOfBonds.begin();
-        BondRunner != ListOfBonds.end();
-        ++BondRunner)
-      if ((*BondRunner)->leftatom == *AtomRunner)
-        counter++;
-  }
-  return counter;
 }
 
@@ -290,5 +272,5 @@
   int No = 0, OldNo = -1;
 
-  if (BondCount != 0) {
+  if (getBondCount() != 0) {
     DoLog(1) && (Log() << Verbose(1) << "Correcting Bond degree of each bond ... " << endl);
     do {
@@ -301,5 +283,5 @@
     DoLog(0) && (Log() << Verbose(0) << " done." << endl);
   } else {
-    DoLog(1) && (Log() << Verbose(1) << "BondCount is " << BondCount << ", no bonds between any of the " << getAtomCount() << " atoms." << endl);
+    DoLog(1) && (Log() << Verbose(1) << "BondCount is " << getBondCount() << ", no bonds between any of the " << getAtomCount() << " atoms." << endl);
   }
   DoLog(0) && (Log() << Verbose(0) << No << " bonds could not be corrected." << endl);
@@ -561,5 +543,5 @@
 {
   struct DFSAccounting DFS;
-  BackEdgeStack = new std::deque<bond *> (BondCount);
+  BackEdgeStack = new std::deque<bond *> (getBondCount());
   DFS.BackEdgeStack = BackEdgeStack;
   MoleculeLeafClass *SubGraphs = new MoleculeLeafClass(NULL);
Index: src/unittests/ListOfBondsUnitTest.cpp
===================================================================
--- src/unittests/ListOfBondsUnitTest.cpp	(revision d4a44c33452f58b4160eb88383f4287dfc249470)
+++ src/unittests/ListOfBondsUnitTest.cpp	(revision 458c3163eb1df36b974240aa85d9aa341ad4408a)
@@ -227,5 +227,5 @@
   // check if removed from molecule
   CPPUNIT_ASSERT_EQUAL( true, TestMolecule->hasBondStructure() );
-  CPPUNIT_ASSERT_EQUAL( (unsigned int)1, TestMolecule->CountBonds() );
+  CPPUNIT_ASSERT_EQUAL( (int)1, TestMolecule->getBondCount() );
 };
 
