Index: src/Atom/atom_bondedparticle.cpp
===================================================================
--- src/Atom/atom_bondedparticle.cpp	(revision 4b62d3aefaf4e4a4eed0441b7235d3d1a06b9dd4)
+++ src/Atom/atom_bondedparticle.cpp	(revision 378fc6b3794e75dfde944b7b41cd15a3a54f23fd)
@@ -346,66 +346,4 @@
 }
 
-/** Corrects the bond degree by one at most if necessary.
- * \return number of corrections done
- */
-int BondedParticle::CorrectBondDegree()
-{
-  OBSERVE;
-  NOTIFY(AtomObservable::BondDegreeChanged);
-  int NoBonds = 0;
-  int OtherNoBonds = 0;
-  int FalseBondDegree = 0;
-  int CandidateDeltaNoBonds = -1;
-  atom *OtherWalker = NULL;
-  bond::ptr CandidateBond;
-
-  NoBonds = CountBonds();
-  LOG(3, "Walker " << *this << ": " << (int)this->getType()->getNoValenceOrbitals() << " > " << NoBonds << "?");
-  const int DeltaNoBonds = (int)(getType()->getNoValenceOrbitals()) - NoBonds;
-  if (DeltaNoBonds > 0) { // we have a mismatch, check all bonding partners for mismatch
-    const BondList& ListOfBonds = getListOfBonds();
-    for (BondList::const_iterator Runner = ListOfBonds.begin(); Runner != ListOfBonds.end(); (++Runner)) {
-      OtherWalker = (*Runner)->GetOtherAtom(this);
-      OtherNoBonds = OtherWalker->CountBonds();
-      const int OtherDeltaNoBonds = (int)(OtherWalker->getType()->getNoValenceOrbitals()) - OtherNoBonds;
-      LOG(3, "OtherWalker " << *OtherWalker << ": " << (int)OtherWalker->getType()->getNoValenceOrbitals() << " > " << OtherNoBonds << "?");
-      if (OtherDeltaNoBonds > 0) { // check if possible candidate
-        const BondList& OtherListOfBonds = OtherWalker->getListOfBonds();
-        if ((CandidateBond == NULL)
-            || (ListOfBonds.size() > OtherListOfBonds.size()) // pick the one with fewer number of bonds first
-            || ((CandidateDeltaNoBonds < 0) || (CandidateDeltaNoBonds > OtherDeltaNoBonds)) ) // pick the one closer to fulfilling its valence first
-        {
-          CandidateDeltaNoBonds = OtherDeltaNoBonds;
-          CandidateBond = (*Runner);
-          LOG(3, "New candidate is " << *CandidateBond << ".");
-        }
-      }
-    }
-    if ((CandidateBond != NULL)) {
-      CandidateBond->setDegree(CandidateBond->getDegree()+1);
-      LOG(2, "Increased bond degree for bond " << *CandidateBond << ".");
-    } else {
-      ELOG(2, "Could not find correct degree for atom " << *this << ".");
-      FalseBondDegree++;
-    }
-  }
-  return FalseBondDegree;
-};
-
-/** Sets the weight of all connected bonds to one.
- */
-void BondedParticle::resetBondDegree()
-{
-  OBSERVE;
-  NOTIFY(BondedParticle::BondDegreeChanged);
-  for (std::vector<BondList>::iterator Runner = ListOfBonds.begin();
-      Runner != ListOfBonds.end();
-      ++Runner)
-    for (BondList::iterator BondRunner = (*Runner).begin();
-        BondRunner != (*Runner).end();
-        ++BondRunner)
-      (*BondRunner)->setDegree(1);
-};
-
 /** Counts the number of bonds weighted by bond::BondDegree.
    * @param _step time step to access
Index: src/Atom/atom_bondedparticle.hpp
===================================================================
--- src/Atom/atom_bondedparticle.hpp	(revision 4b62d3aefaf4e4a4eed0441b7235d3d1a06b9dd4)
+++ src/Atom/atom_bondedparticle.hpp	(revision 378fc6b3794e75dfde944b7b41cd15a3a54f23fd)
@@ -54,6 +54,4 @@
   void ClearBondsAtStep(const unsigned int _step);
   int CountBonds() const;
-  int CorrectBondDegree();
-  void resetBondDegree();
   void OutputBondOfAtom(std::ostream &ost) const;
   void OutputBonds(ofstream * const BondFile) const;
Index: src/Atom/atom_observable.hpp
===================================================================
--- src/Atom/atom_observable.hpp	(revision 4b62d3aefaf4e4a4eed0441b7235d3d1a06b9dd4)
+++ src/Atom/atom_observable.hpp	(revision 378fc6b3794e75dfde944b7b41cd15a3a54f23fd)
@@ -35,5 +35,4 @@
     BondsAdded,       // new bonds have appeared on ListOfBonds
     BondsRemoved,       // new bonds have appeared on ListOfBonds
-    BondDegreeChanged,     // bond degree has changed
     NotificationType_MAX  // denotes the maximum of available notification types
   };
Index: src/Graph/BondGraph.cpp
===================================================================
--- src/Graph/BondGraph.cpp	(revision 4b62d3aefaf4e4a4eed0441b7235d3d1a06b9dd4)
+++ src/Graph/BondGraph.cpp	(revision 378fc6b3794e75dfde944b7b41cd15a3a54f23fd)
@@ -224,2 +224,59 @@
   return true;
 }
+
+/** Corrects the bond degree by one at most if necessary.
+ * \return number of corrections done
+ */
+int BondGraph::CorrectBondDegree(atom *_atom) const
+{
+  int NoBonds = 0;
+  int OtherNoBonds = 0;
+  int FalseBondDegree = 0;
+  int CandidateDeltaNoBonds = -1;
+  atom *OtherWalker = NULL;
+  bond::ptr CandidateBond;
+
+  NoBonds = _atom->CountBonds();
+  LOG(3, "Walker " << *_atom << ": " << (int)_atom->getType()->getNoValenceOrbitals() << " > " << NoBonds << "?");
+  const int DeltaNoBonds = (int)(_atom->getType()->getNoValenceOrbitals()) - NoBonds;
+  if (DeltaNoBonds > 0) { // we have a mismatch, check all bonding partners for mismatch
+    const BondList& ListOfBonds = _atom->getListOfBonds();
+    for (BondList::const_iterator Runner = ListOfBonds.begin(); Runner != ListOfBonds.end(); (++Runner)) {
+      OtherWalker = (*Runner)->GetOtherAtom(_atom);
+      OtherNoBonds = OtherWalker->CountBonds();
+      const int OtherDeltaNoBonds = (int)(OtherWalker->getType()->getNoValenceOrbitals()) - OtherNoBonds;
+      LOG(3, "OtherWalker " << *OtherWalker << ": " << (int)OtherWalker->getType()->getNoValenceOrbitals() << " > " << OtherNoBonds << "?");
+      if (OtherDeltaNoBonds > 0) { // check if possible candidate
+        const BondList& OtherListOfBonds = OtherWalker->getListOfBonds();
+        if ((CandidateBond == NULL)
+            || (ListOfBonds.size() > OtherListOfBonds.size()) // pick the one with fewer number of bonds first
+            || ((CandidateDeltaNoBonds < 0) || (CandidateDeltaNoBonds > OtherDeltaNoBonds)) ) // pick the one closer to fulfilling its valence first
+        {
+          CandidateDeltaNoBonds = OtherDeltaNoBonds;
+          CandidateBond = (*Runner);
+          LOG(3, "New candidate is " << *CandidateBond << ".");
+        }
+      }
+    }
+    if ((CandidateBond != NULL)) {
+      CandidateBond->setDegree(CandidateBond->getDegree()+1);
+      LOG(2, "Increased bond degree for bond " << *CandidateBond << ".");
+    } else {
+      ELOG(2, "Could not find correct degree for atom " << *_atom << ".");
+      FalseBondDegree++;
+    }
+  }
+  return FalseBondDegree;
+};
+
+/** Sets the weight of all connected bonds to one.
+ */
+void BondGraph::resetBondDegree(atom *_atom) const
+{
+  const BondList &ListOfBonds = _atom->getListOfBonds();
+  for (BondList::const_iterator BondRunner = ListOfBonds.begin();
+      BondRunner != ListOfBonds.end();
+      ++BondRunner)
+    (*BondRunner)->setDegree(1);
+};
+
Index: src/Graph/BondGraph.hpp
===================================================================
--- src/Graph/BondGraph.hpp	(revision 4b62d3aefaf4e4a4eed0441b7235d3d1a06b9dd4)
+++ src/Graph/BondGraph.hpp	(revision 378fc6b3794e75dfde944b7b41cd15a3a54f23fd)
@@ -478,5 +478,5 @@
     // reset bond degrees
     for(iterator_type AtomRunner = Set.begin(); AtomRunner != Set.end(); ++AtomRunner) {
-      (*AtomRunner)->resetBondDegree();
+      resetBondDegree(*AtomRunner);
     }
   }
@@ -499,5 +499,5 @@
       No=0;
       for(iterator_type AtomRunner = Set.begin(); AtomRunner != Set.end(); ++AtomRunner) {
-        No+=(*AtomRunner)->CorrectBondDegree();
+        No+=CorrectBondDegree(*AtomRunner);
       }
     } while (OldNo != No);
@@ -511,4 +511,8 @@
     return !(*this == other);
   }
+
+  int CorrectBondDegree(atom *_atom) const;
+
+  void resetBondDegree(atom *_atom) const;
 
 private:
