Index: src/Fragmentation/BondsPerShortestPath.cpp
===================================================================
--- src/Fragmentation/BondsPerShortestPath.cpp	(revision bf12d19a7f676d91ce9221675cebc29d5393caa9)
+++ src/Fragmentation/BondsPerShortestPath.cpp	(revision c8302f3908877b8fb1eda3e8ac494300a5249860)
@@ -90,5 +90,5 @@
     BondsPerSPCount[i] = 0;
   BondsPerSPCount[0] = 1;
-  bond *Binder = new bond(_Root, _Root);
+  bond::ptr Binder = new bond(_Root, _Root);
   BondsPerSPList[0].push_back(Binder);
 };
@@ -138,5 +138,5 @@
   atom *OtherWalker = NULL;
   atom *Predecessor = NULL;
-  bond *Binder = NULL;
+  bond::ptr Binder = NULL;
   int RootKeyNr = _RootKeyNr;
   int RemainingWalkers = -1;
Index: src/Fragmentation/PowerSetGenerator.cpp
===================================================================
--- src/Fragmentation/PowerSetGenerator.cpp	(revision bf12d19a7f676d91ce9221675cebc29d5393caa9)
+++ src/Fragmentation/PowerSetGenerator.cpp	(revision c8302f3908877b8fb1eda3e8ac494300a5249860)
@@ -88,5 +88,5 @@
  * \return number of set bits
  */
-int PowerSetGenerator::AddPowersetToSnakeStack(int verbosity, int CurrentCombination, int SetDimension, KeySet *FragmentSet, std::vector<bond *> &BondsSet, int *&TouchedList, int &TouchedIndex)
+int PowerSetGenerator::AddPowersetToSnakeStack(int verbosity, int CurrentCombination, int SetDimension, KeySet *FragmentSet, std::vector<bond::ptr > &BondsSet, int *&TouchedList, int &TouchedIndex)
 {
   atom *OtherWalker = NULL;
@@ -122,8 +122,8 @@
  * \return number of elements
  */
-int PowerSetGenerator::CountSetMembers(std::list<bond *>::const_iterator SetFirst, std::list<bond *>::const_iterator SetLast, int *&TouchedList, int TouchedIndex)
+int PowerSetGenerator::CountSetMembers(std::list<bond::ptr >::const_iterator SetFirst, std::list<bond::ptr >::const_iterator SetLast, int *&TouchedList, int TouchedIndex)
 {
   int SetDimension = 0;
-  for( std::list<bond *>::const_iterator Binder = SetFirst;
+  for( std::list<bond::ptr >::const_iterator Binder = SetFirst;
       Binder != SetLast;
       ++Binder) {
@@ -144,8 +144,8 @@
  * \return number of elements
  */
-int PowerSetGenerator::FillBondsList(std::vector<bond *> &BondsList, std::list<bond *>::const_iterator SetFirst, std::list<bond *>::const_iterator SetLast, int *&TouchedList, int TouchedIndex)
+int PowerSetGenerator::FillBondsList(std::vector<bond::ptr > &BondsList, std::list<bond::ptr >::const_iterator SetFirst, std::list<bond::ptr >::const_iterator SetLast, int *&TouchedList, int TouchedIndex)
 {
   int SetDimension = 0;
-  for( std::list<bond *>::const_iterator Binder = SetFirst;
+  for( std::list<bond::ptr >::const_iterator Binder = SetFirst;
       Binder != SetLast;
       ++Binder) {
@@ -257,5 +257,5 @@
  * \param SubOrder remaining number of allowed vertices to add
  */
-void PowerSetGenerator::SPFragmentGenerator(int RootDistance, std::vector<bond *> &BondsSet, int SetDimension, int SubOrder)
+void PowerSetGenerator::SPFragmentGenerator(int RootDistance, std::vector<bond::ptr > &BondsSet, int SetDimension, int SubOrder)
 {
   Info info(__func__);
@@ -302,5 +302,5 @@
 
           // then allocate and fill the list
-          std::vector<bond *> BondsList;
+          std::vector<bond::ptr > BondsList;
           BondsList.resize(SubSetDimension);
           SubSetDimension = FillBondsList(BondsList, BondsPerSPList.BondsPerSPList[SP].begin(), BondsPerSPList.BondsPerSPList[SP].end(), TouchedList, TouchedIndex);
Index: src/Fragmentation/PowerSetGenerator.hpp
===================================================================
--- src/Fragmentation/PowerSetGenerator.hpp	(revision bf12d19a7f676d91ce9221675cebc29d5393caa9)
+++ src/Fragmentation/PowerSetGenerator.hpp	(revision c8302f3908877b8fb1eda3e8ac494300a5249860)
@@ -17,8 +17,8 @@
 #include <vector>
 
+#include "Bond/bond.hpp"
 #include "Fragmentation/BondsPerShortestPath.hpp"
 #include "Fragmentation/HydrogenSaturation_enum.hpp"
 
-class bond;
 class UniqueFragments;
 
@@ -29,10 +29,10 @@
   ~PowerSetGenerator();
 
-  void SPFragmentGenerator(int RootDistance, std::vector<bond *> &BondsSet, int SetDimension, int SubOrder);
+  void SPFragmentGenerator(int RootDistance, std::vector<bond::ptr > &BondsSet, int SetDimension, int SubOrder);
   int operator()(KeySet &RestrictedKeySet, const enum HydrogenSaturation saturation);
   void RemoveAllTouchedFromSnakeStack(int verbosity, KeySet *FragmentSet, int *&TouchedList, int &TouchedIndex);
-  int FillBondsList(std::vector<bond *> &BondsList, std::list<bond *>::const_iterator SetFirst, std::list<bond *>::const_iterator SetLast, int *&TouchedList, int TouchedIndex);
-  int CountSetMembers(std::list<bond *>::const_iterator SetFirst, std::list<bond *>::const_iterator SetLast, int *&TouchedList, int TouchedIndex);
-  int AddPowersetToSnakeStack(int verbosity, int CurrentCombination, int SetDimension, KeySet *FragmentSet, std::vector<bond *> &BondsSet, int *&TouchedList, int &TouchedIndex);
+  int FillBondsList(std::vector<bond::ptr > &BondsList, std::list<bond::ptr >::const_iterator SetFirst, std::list<bond::ptr >::const_iterator SetLast, int *&TouchedList, int TouchedIndex);
+  int CountSetMembers(std::list<bond::ptr >::const_iterator SetFirst, std::list<bond::ptr >::const_iterator SetLast, int *&TouchedList, int TouchedIndex);
+  int AddPowersetToSnakeStack(int verbosity, int CurrentCombination, int SetDimension, KeySet *FragmentSet, std::vector<bond::ptr > &BondsSet, int *&TouchedList, int &TouchedIndex);
   void ClearingTouched(int verbosity, int *&TouchedList, int SubOrder, int &TouchedIndex);
 
