Index: src/Fragmentation/AtomFragmentsMap.cpp
===================================================================
--- src/Fragmentation/AtomFragmentsMap.cpp	(revision bd6e5cea786e2eef1815fd25b1b4d870619ea0bb)
+++ 	(revision )
@@ -1,73 +1,0 @@
-/*
- * Project: MoleCuilder
- * Description: creates and alters molecular systems
- * Copyright (C)  2016 Frederik Heber. All rights reserved.
- *
- *
- *   This file is part of MoleCuilder.
- *
- *    MoleCuilder is free software: you can redistribute it and/or modify
- *    it under the terms of the GNU General Public License as published by
- *    the Free Software Foundation, either version 2 of the License, or
- *    (at your option) any later version.
- *
- *    MoleCuilder is distributed in the hope that it will be useful,
- *    but WITHOUT ANY WARRANTY; without even the implied warranty of
- *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- *    GNU General Public License for more details.
- *
- *    You should have received a copy of the GNU General Public License
- *    along with MoleCuilder.  If not, see <http://www.gnu.org/licenses/>.
- */
-
-/*
- * AtomFragmentsMap.cpp
- *
- *  Created on: Mar 7, 2016
- *      Author: heber
- */
-
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include "CodePatterns/MemDebug.hpp"
-
-#include "CodePatterns/Log.hpp"
-
-#include "AtomFragmentsMap.hpp"
-
-#include "AtomIdSet.hpp"
-#include "Fragmentation/Graph.hpp"
-#include "Fragmentation/KeySet.hpp"
-
-AtomFragmentsMap::AtomFragmentsMap(
-    const Graph &_graph,
-    size_t _MaxOrder)
-{
-  /// create a map of atom to keyset (below equal MaxOrder)
-  LOG(1, "INFO: Placing all atoms and their keysets into a map.");
-  for (Graph::const_iterator keysetiter = _graph.begin();
-      keysetiter != _graph.end(); ++keysetiter) {
-    const KeySet &keyset = keysetiter->first;
-    LOG(2, "DEBUG: Current keyset is " << keyset);
-    if ((keyset.size() > _MaxOrder) || (keyset.empty()))
-      continue;
-    for (KeySet::const_iterator keyiter = keyset.begin();
-        keyiter != keyset.end(); ++keyiter) {
-      // either create new list ...
-      std::pair<AtomFragmentsMap_t::iterator, bool> inserter =
-          atommap.insert( std::make_pair(*keyiter, keysets_t(1, keyset) ));
-      // ... or push to end
-      if (inserter.second) {
-        LOG(3, "DEBUG: Created new entry in map.");
-      } else {
-        LOG(3, "DEBUG: Added keyset to present entry.");
-        inserter.first->second.push_back(keyset);
-      }
-    }
-  }
-  LOG(2, "DEBUG: There are " << atommap.size() << " entries in lookup.");
-}
Index: src/Fragmentation/AtomFragmentsMap.hpp
===================================================================
--- src/Fragmentation/AtomFragmentsMap.hpp	(revision bd6e5cea786e2eef1815fd25b1b4d870619ea0bb)
+++ 	(revision )
@@ -1,49 +1,0 @@
-/*
- * AtomFragmentsMap.hpp
- *
- *  Created on: Mar 7, 2016
- *      Author: heber
- */
-
-
-#ifndef ATOMFRAGMENTSMAP_HPP_
-#define ATOMFRAGMENTSMAP_HPP_
-
-// include config.h
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
-
-#include <list>
-#include <map>
-
-#include "types.hpp"
-
-class KeySet;
-class Graph;
-
-/** This class creates in instantiation a map connecting each atom with
- * the (known) fragments it takes part in.
- *
- */
-class AtomFragmentsMap
-{
-public:
-  AtomFragmentsMap(
-      const Graph &_graph,
-      size_t _MaxOrder);
-
-  typedef std::list<KeySet> keysets_t;
-  //!> typedef for the internal map
-  typedef std::map<atomId_t, keysets_t> AtomFragmentsMap_t;
-
-  const AtomFragmentsMap_t& getMap() const
-  { return atommap; }
-
-private:
-  //!> internal map filled on instantiation
-  AtomFragmentsMap_t atommap;
-};
-
-
-#endif /* ATOMFRAGMENTSMAP_HPP_ */
Index: src/Fragmentation/Homology/AtomFragmentsMap.cpp
===================================================================
--- src/Fragmentation/Homology/AtomFragmentsMap.cpp	(revision d713ce2af14940fbc4786414c066c55aab222aa5)
+++ src/Fragmentation/Homology/AtomFragmentsMap.cpp	(revision d713ce2af14940fbc4786414c066c55aab222aa5)
@@ -0,0 +1,76 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2016 Frederik Heber. All rights reserved.
+ *
+ *
+ *   This file is part of MoleCuilder.
+ *
+ *    MoleCuilder is free software: you can redistribute it and/or modify
+ *    it under the terms of the GNU General Public License as published by
+ *    the Free Software Foundation, either version 2 of the License, or
+ *    (at your option) any later version.
+ *
+ *    MoleCuilder is distributed in the hope that it will be useful,
+ *    but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *    GNU General Public License for more details.
+ *
+ *    You should have received a copy of the GNU General Public License
+ *    along with MoleCuilder.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * AtomFragmentsMap.cpp
+ *
+ *  Created on: Mar 7, 2016
+ *      Author: heber
+ */
+
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "CodePatterns/MemDebug.hpp"
+
+#include "CodePatterns/Log.hpp"
+#include "CodePatterns/Singleton_impl.hpp"
+
+#include "AtomFragmentsMap.hpp"
+
+#include "AtomIdSet.hpp"
+#include "Fragmentation/Graph.hpp"
+#include "Fragmentation/KeySet.hpp"
+
+void AtomFragmentsMap::insert(
+    const Graph &_graph,
+    size_t _MaxOrder)
+{
+  /// create a map of atom to keyset (below equal MaxOrder)
+  LOG(1, "INFO: Placing all atoms and their keysets into internal map.");
+  for (Graph::const_iterator keysetiter = _graph.begin();
+      keysetiter != _graph.end(); ++keysetiter) {
+    const KeySet &keyset = keysetiter->first;
+    LOG(2, "DEBUG: Current keyset is " << keyset);
+    if ((keyset.size() > _MaxOrder) || (keyset.empty()))
+      continue;
+    for (KeySet::const_iterator keyiter = keyset.begin();
+        keyiter != keyset.end(); ++keyiter) {
+      // either create new list ...
+      std::pair<AtomFragmentsMap_t::iterator, bool> inserter =
+          atommap.insert( std::make_pair(*keyiter, keysets_t(1, keyset) ));
+      // ... or push to end
+      if (inserter.second) {
+        LOG(3, "DEBUG: Created new entry in map.");
+      } else {
+        LOG(3, "DEBUG: Added keyset to present entry.");
+        inserter.first->second.push_back(keyset);
+      }
+    }
+  }
+  LOG(2, "DEBUG: There are now " << atommap.size() << " entries in lookup.");
+}
+
+CONSTRUCT_SINGLETON(AtomFragmentsMap)
Index: src/Fragmentation/Homology/AtomFragmentsMap.hpp
===================================================================
--- src/Fragmentation/Homology/AtomFragmentsMap.hpp	(revision d713ce2af14940fbc4786414c066c55aab222aa5)
+++ src/Fragmentation/Homology/AtomFragmentsMap.hpp	(revision d713ce2af14940fbc4786414c066c55aab222aa5)
@@ -0,0 +1,76 @@
+/*
+ * AtomFragmentsMap.hpp
+ *
+ *  Created on: Mar 7, 2016
+ *      Author: heber
+ */
+
+
+#ifndef ATOMFRAGMENTSMAP_HPP_
+#define ATOMFRAGMENTSMAP_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "CodePatterns/Singleton.hpp"
+
+#include <list>
+#include <map>
+
+#include "types.hpp"
+
+class KeySet;
+class Graph;
+
+/** This class creates in instantiation a map connecting each atom with
+ * the (known) fragments it takes part in.
+ *
+ * In the HomologyGraph and its -Container we do not have this information
+ * any longer. However, we need this in order to make statements about atomic
+ * properties from calculated fragment properties.
+ *
+ */
+class AtomFragmentsMap : public Singleton<AtomFragmentsMap>
+{
+public:
+  //** Function to insert new fragments into storage container.
+  void insert(
+      const Graph &_graph,
+      size_t _MaxOrder);
+
+  /** Function to clear the container.
+   *
+   */
+  void clear()
+  { atommap.clear(); }
+
+  typedef std::list<KeySet> keysets_t;
+  //!> typedef for the internal map
+  typedef std::map<atomId_t, keysets_t> AtomFragmentsMap_t;
+
+  const AtomFragmentsMap_t& getMap() const
+  { return atommap; }
+
+private:
+  //!> grant singleton pattern access to private cstor/dstor
+  friend class Singleton<AtomFragmentsMap>;
+
+  /** Private default cstor.
+   *
+   */
+  AtomFragmentsMap() {}
+
+  /** Private default dstor.
+   *
+   */
+  ~AtomFragmentsMap() {}
+
+private:
+  //!> internal map filled on instantiation
+  AtomFragmentsMap_t atommap;
+};
+
+
+#endif /* ATOMFRAGMENTSMAP_HPP_ */
Index: src/Fragmentation/Interfragmenter.cpp
===================================================================
--- src/Fragmentation/Interfragmenter.cpp	(revision bd6e5cea786e2eef1815fd25b1b4d870619ea0bb)
+++ src/Fragmentation/Interfragmenter.cpp	(revision d713ce2af14940fbc4786414c066c55aab222aa5)
@@ -170,6 +170,7 @@
     const enum HydrogenTreatment treatment)
 {
-  AtomFragmentsMap AtomFragments(TotalGraph, MaxOrder);
-  const atomkeyset_t &atomkeyset = AtomFragments.getMap();
+  AtomFragmentsMap& atomfragments_container = AtomFragmentsMap::getInstance();
+  atomfragments_container.insert(TotalGraph, MaxOrder);
+  const atomkeyset_t &atomkeyset = atomfragments_container.getMap();
 
   Graph InterFragments;
Index: src/Fragmentation/Interfragmenter.hpp
===================================================================
--- src/Fragmentation/Interfragmenter.hpp	(revision bd6e5cea786e2eef1815fd25b1b4d870619ea0bb)
+++ src/Fragmentation/Interfragmenter.hpp	(revision d713ce2af14940fbc4786414c066c55aab222aa5)
@@ -19,5 +19,5 @@
 
 #include "AtomIdSet.hpp"
-#include "Fragmentation/AtomFragmentsMap.hpp"
+#include "Fragmentation/Homology/AtomFragmentsMap.hpp"
 #include "Fragmentation/HydrogenSaturation_enum.hpp"
 
Index: src/Fragmentation/Makefile.am
===================================================================
--- src/Fragmentation/Makefile.am	(revision bd6e5cea786e2eef1815fd25b1b4d870619ea0bb)
+++ src/Fragmentation/Makefile.am	(revision d713ce2af14940fbc4786414c066c55aab222aa5)
@@ -12,4 +12,5 @@
 	Fragmentation/Exporters/SphericalPointDistribution.cpp \
 	Fragmentation/Exporters/SphericalPointDistribution_getPoints.cpp \
+	Fragmentation/Homology/AtomFragmentsMap.cpp \
 	Fragmentation/Homology/FragmentEdge.cpp \
 	Fragmentation/Homology/FragmentNode.cpp \
@@ -17,5 +18,4 @@
 	Fragmentation/Homology/HomologyGraph.cpp \
 	Fragmentation/AdaptivityMap.cpp \
-	Fragmentation/AtomFragmentsMap.cpp \
 	Fragmentation/BondsPerShortestPath.cpp \
 	Fragmentation/EnergyMatrix.cpp \
@@ -42,4 +42,5 @@
 	Fragmentation/Exporters/SaturationDistanceMaximizer.hpp \
 	Fragmentation/Exporters/SphericalPointDistribution.hpp \
+	Fragmentation/Homology/AtomFragmentsMap.hpp \
 	Fragmentation/Homology/FragmentEdge.hpp \
 	Fragmentation/Homology/FragmentNode.hpp \
@@ -47,5 +48,4 @@
 	Fragmentation/Homology/HomologyGraph.hpp \
 	Fragmentation/AdaptivityMap.hpp \
-	Fragmentation/AtomFragmentsMap.hpp \
 	Fragmentation/AtomMask.hpp \
 	Fragmentation/BondsPerShortestPath.hpp \
