Index: src/Fragmentation/Summation/IndexSet.hpp
===================================================================
--- src/Fragmentation/Summation/IndexSet.hpp	(revision 10f0cb73e0cc1105d7dc5360f9c6409f9674a51e)
+++ src/Fragmentation/Summation/IndexSet.hpp	(revision 7814081154ced1c27fae3a7fae5bc9f98b98e424)
@@ -49,4 +49,24 @@
 };
 
+inline bool operator==(const IndexSet::ptr &a, const IndexSet::ptr &b)
+{
+  return (*a == *b);
+}
+
+inline bool operator!=(const IndexSet::ptr &a, const IndexSet::ptr &b)
+{
+  return (*a != *b);
+}
+
+inline bool operator<(const IndexSet::ptr &a, const IndexSet::ptr &b)
+{
+  return (*a < *b);
+}
+
+inline bool operator>(const IndexSet::ptr &a, const IndexSet::ptr &b)
+{
+  return (*a > *b);
+}
+
 std::ostream & operator<<(std::ostream &ost, const IndexSet &indexset);
 
Index: src/Fragmentation/Summation/IndexSetContainer.cpp
===================================================================
--- src/Fragmentation/Summation/IndexSetContainer.cpp	(revision 10f0cb73e0cc1105d7dc5360f9c6409f9674a51e)
+++ src/Fragmentation/Summation/IndexSetContainer.cpp	(revision 7814081154ced1c27fae3a7fae5bc9f98b98e424)
@@ -61,4 +61,36 @@
 }
 
+IndexSet::ptr IndexSetContainer::createSuperSet(const std::vector<IndexSet> &_container) const
+{
+  // create superset
+  IndexSet::ptr _AllIndices(new IndexSet);
+  for (std::vector<IndexSet>::const_iterator iter = _container.begin();
+      iter != _container.end(); ++iter)
+    for(IndexSet::const_iterator keyiter = (*iter).begin();
+        keyiter != (*iter).end(); ++keyiter) {
+      if (*keyiter != -1)
+        _AllIndices->insert((Index_t)*keyiter);
+    }
+  LOG(2, "DEBUG: AllIndices is " << *_AllIndices << ".");
+
+  return _AllIndices;
+}
+
+IndexSet::ptr IndexSetContainer::createSuperSet(const std::vector<IndexSet::ptr> &_container) const
+{
+  // create superset
+  IndexSet::ptr _AllIndices(new IndexSet);
+  for (std::vector<IndexSet::ptr>::const_iterator iter = _container.begin();
+      iter != _container.end(); ++iter)
+    for(IndexSet::const_iterator keyiter = (*iter)->begin();
+        keyiter != (*iter)->end(); ++keyiter) {
+      if (*keyiter != -1)
+        _AllIndices->insert((Index_t)*keyiter);
+    }
+  LOG(2, "DEBUG: AllIndices is " << *_AllIndices << ".");
+
+  return _AllIndices;
+}
+
 IndexSetContainer::IndexSetContainer(const KeySetsContainer &_keysets) :
      AllIndices(createSuperSet(_keysets))
Index: src/Fragmentation/Summation/IndexSetContainer.hpp
===================================================================
--- src/Fragmentation/Summation/IndexSetContainer.hpp	(revision 10f0cb73e0cc1105d7dc5360f9c6409f9674a51e)
+++ src/Fragmentation/Summation/IndexSetContainer.hpp	(revision 7814081154ced1c27fae3a7fae5bc9f98b98e424)
@@ -41,11 +41,9 @@
   typedef boost::shared_ptr<IndexSetContainer> ptr;
 
-  /** Constructor from an unsorted vector of instances.
+  /** Constructor from a sorted vector of instances.
    *
-   * @param _container unsorted vector of instances
+   * @param _container sorted vector of instances
    */
-  IndexSetContainer(const SortedVector<IndexSet>::Container_t &_container) :
-    SortedVector<IndexSet>(_container)
-  {}
+  IndexSetContainer(const SortedVector<IndexSet>::Container_t &_container);
 
   /** Constructor from an unsorted vector of instances.
@@ -53,7 +51,5 @@
    * @param _container unsorted vector of instances
    */
-  IndexSetContainer(const std::vector<IndexSet> &_container) :
-    SortedVector<IndexSet>(_container)
-  {}
+  IndexSetContainer(const std::vector<IndexSet> &_container);
 
   /** Constructor from a single instance.
@@ -61,7 +57,5 @@
    * @param _instance single instance
    */
-  IndexSetContainer(IndexSet::ptr &_instance) :
-    SortedVector<IndexSet>(_instance)
-  {}
+  IndexSetContainer(IndexSet::ptr &_instance);
 
   /** Conversion constructor from a KeySetConntainer.
@@ -100,7 +94,39 @@
   IndexSet::ptr createSuperSet(const KeySetsContainer &_keysets) const;
 
+  /** Helper function to create the super set out of a vector of IndexSet's.
+   *
+   * @param _container container with IndexSet's to construct super set for
+   * @return super set created from all IndexSet's in \a _container
+   */
+  IndexSet::ptr createSuperSet(const std::vector<IndexSet> &_container) const;
+
+  /** Helper function to create the super set out of a vector of IndexSet's.
+   *
+   * @param _container container with IndexSet's to construct super set for
+   * @return super set created from all IndexSet's in \a _container
+   */
+  IndexSet::ptr createSuperSet(const std::vector<IndexSet::ptr> &_container) const;
+
   //!> super set that contains all present index sets
   IndexSet::ptr AllIndices;
 };
+
+inline
+IndexSetContainer::IndexSetContainer(const SortedVector<IndexSet>::Container_t &_container) :
+  SortedVector<IndexSet>(_container),
+  AllIndices(createSuperSet(_container))
+{}
+
+inline
+IndexSetContainer::IndexSetContainer(const std::vector<IndexSet> &_container) :
+  SortedVector<IndexSet>(_container),
+  AllIndices(createSuperSet(_container))
+{}
+
+inline
+IndexSetContainer::IndexSetContainer(IndexSet::ptr &_instance) :
+  SortedVector<IndexSet>(_instance),
+  AllIndices(_instance)
+{}
 
 //!> typedef for IndexSet instance stored as shared_ptr in SortedVector
