Index: src/Fragmentation/Summation/Containers/MPQCData.cpp
===================================================================
--- src/Fragmentation/Summation/Containers/MPQCData.cpp	(revision 291ad92d85f5ff0b403495568c5fcef003bc6416)
+++ src/Fragmentation/Summation/Containers/MPQCData.cpp	(revision d5ca1af98e88b536fe2483fab7d7d2b875452e83)
@@ -139,4 +139,5 @@
         +toString(instance.sampled_grid.getWindowGridPoints())+" and was "+toString(window_gridpoints));
     instance.positions = other.positions;
+    instance.atomicnumbers = other.atomicnumbers;
     instance.charges = other.charges;
     instance.times = other.times;
Index: src/Fragmentation/Summation/Containers/MPQCData.hpp
===================================================================
--- src/Fragmentation/Summation/Containers/MPQCData.hpp	(revision 291ad92d85f5ff0b403495568c5fcef003bc6416)
+++ src/Fragmentation/Summation/Containers/MPQCData.hpp	(revision d5ca1af98e88b536fe2483fab7d7d2b875452e83)
@@ -110,6 +110,7 @@
   SamplingGrid sampled_grid;
 
-  // nuclei positions and charges
+  // nuclei positions, atomic numbers and charges
   std::vector< std::vector<double> > positions;
+  std::vector< unsigned int > atomicnumbers;
   std::vector<double> charges;
 
@@ -161,4 +162,6 @@
     ar & positions;
     ar & charges;
+    if (version > 3)
+      ar & atomicnumbers;
     ar & times.total_walltime;
     ar & times.total_cputime;
@@ -174,5 +177,5 @@
 };
 
-BOOST_CLASS_VERSION(MPQCData, 3)
+BOOST_CLASS_VERSION(MPQCData, 4)
 
 std::ostream & operator<<(std::ostream &ost, const MPQCData &data);
Index: src/Fragmentation/Summation/Converter/DataConverter.hpp
===================================================================
--- src/Fragmentation/Summation/Converter/DataConverter.hpp	(revision 291ad92d85f5ff0b403495568c5fcef003bc6416)
+++ src/Fragmentation/Summation/Converter/DataConverter.hpp	(revision d5ca1af98e88b536fe2483fab7d7d2b875452e83)
@@ -175,5 +175,5 @@
     MPQCDataFragmentMap_t instance;
     boost::fusion::at_key<MPQCDataFused::fragment>(instance) =
-        Fragment(extractedData.positions, extractedData.charges);
+        Fragment(extractedData.positions, extractedData.atomicnumbers, extractedData.charges);
     MPQCData_Fragment_fused.insert( std::make_pair(dataiter->first, instance) );
   }
Index: src/Fragmentation/Summation/SetValues/Fragment.cpp
===================================================================
--- src/Fragmentation/Summation/SetValues/Fragment.cpp	(revision 291ad92d85f5ff0b403495568c5fcef003bc6416)
+++ src/Fragmentation/Summation/SetValues/Fragment.cpp	(revision d5ca1af98e88b536fe2483fab7d7d2b875452e83)
@@ -54,12 +54,16 @@
 {}
 
-Fragment::Fragment(const positions_t &_positions, const charges_t &_charges)
+Fragment::Fragment(
+    const positions_t &_positions,
+    const atomicnumbers_t &_atomicnumbers,
+    const charges_t &_charges)
 {
   ASSERT( _positions.size() == _charges.size(),
       "Fragment::Fragment() - given charges and positions don't match in size.");
   positions_t::const_iterator piter = _positions.begin();
+  atomicnumbers_t::const_iterator aiter = _atomicnumbers.begin();
   charges_t::const_iterator citer = _charges.begin();
-  for (;piter != _positions.end(); ++piter, ++citer)
-    nuclei.push_back( make_pair( *piter, *citer) );
+  for (;piter != _positions.end(); ++piter, ++aiter, ++citer)
+    nuclei.push_back( createNucleus(*piter, *aiter, *citer) );
 }
 
@@ -121,4 +125,13 @@
 }
 
+Fragment::atomicnumbers_t Fragment::getAtomicNumbers() const
+{
+  atomicnumbers_t positions;
+  for (nuclei_t::const_iterator iter = nuclei.begin();
+      iter != nuclei.end(); ++iter)
+    positions.push_back(iter->second.first);
+  return positions;
+}
+
 Fragment::charges_t Fragment::getCharges() const
 {
@@ -126,11 +139,14 @@
   for (nuclei_t::const_iterator iter = nuclei.begin();
       iter != nuclei.end(); ++iter)
-    charges.push_back(iter->second);
+    charges.push_back(iter->second.second);
   return charges;
 }
 
-Fragment::nucleus_t Fragment::createNucleus(const position_t &position, const double charge)
-{
-  return nucleus_t( make_pair( position, charge ) );
+Fragment::nucleus_t Fragment::createNucleus(
+    const position_t &position,
+    const atomicNumber_t &atomicnumber,
+    const double charge)
+{
+  return nucleus_t( make_pair( position, std::make_pair(atomicnumber, charge) ) );
 }
 
@@ -174,5 +190,5 @@
 std::ostream & operator<<(std::ostream &ost, const Fragment::nucleus_t &n)
 {
-  ost << n.first << " with charge " << n.second;
+  ost << n.first << " with Z of " << n.second.first << " charge " << n.second.second;
   return ost;
 }
@@ -183,5 +199,6 @@
   // check positions
   status &= Fragment::isPositionEqual(a.first, b.first);
-  status &= fabs(a.second - b.second) < std::numeric_limits<double>::epsilon();
+  status &= (a.second.first == b.second.first);
+  status &= fabs(a.second.second - b.second.second) < std::numeric_limits<double>::epsilon();
   return status;
 }
@@ -190,6 +207,7 @@
 {
   Fragment::positions_t positions;
+  Fragment::atomicnumbers_t atomicnumbers;
   Fragment::charges_t charges;
-  Fragment returnvalue(positions, charges);
+  Fragment returnvalue(positions, atomicnumbers, charges);
   return returnvalue;
 }
Index: src/Fragmentation/Summation/SetValues/Fragment.hpp
===================================================================
--- src/Fragmentation/Summation/SetValues/Fragment.hpp	(revision 291ad92d85f5ff0b403495568c5fcef003bc6416)
+++ src/Fragmentation/Summation/SetValues/Fragment.hpp	(revision d5ca1af98e88b536fe2483fab7d7d2b875452e83)
@@ -34,5 +34,7 @@
   typedef double charge_t;
   typedef std::vector< charge_t > charges_t;
-  typedef std::pair< position_t, charge_t> nucleus_t;
+  typedef unsigned int atomicNumber_t; // typedef is copied
+  typedef std::vector< atomicNumber_t > atomicnumbers_t;
+  typedef std::pair< position_t, std::pair<atomicNumber_t, charge_t> > nucleus_t;
   typedef std::vector< nucleus_t > nuclei_t;
 
@@ -52,7 +54,11 @@
    *
    * @param _positions given positions
+   * @param _atomicnumbers given atomic numbers
    * @param _charges given charges
    */
-  Fragment(const positions_t &_positions, const charges_t &_charges);
+  Fragment(
+      const positions_t &_positions,
+      const atomicnumbers_t &_atomicnumbers,
+      const charges_t &_charges);
 
   /** Adding another fragment onto this one.
@@ -86,4 +92,10 @@
   positions_t getPositions() const;
 
+  /** Getter for all stored atomic numbers.
+   *
+   * @return vector of atomic numbers
+   */
+  atomicnumbers_t getAtomicNumbers() const;
+
   /** Getter for all stored charges.
    *
@@ -107,8 +119,12 @@
    *
    * @param position position of nucleus to create
+   * @param atomicnumber atomic number of nucleus to create
    * @param charge charge of nucleus to create
    * @return nucleus with given \a position and \a charge
    */
-  static nucleus_t createNucleus(const position_t &position, const double charge);
+  static nucleus_t createNucleus(
+      const position_t &position,
+      const atomicNumber_t &atomicnumber,
+      const double charge);
 
   /** Helper function to check whether two positions are equal.
Index: src/Fragmentation/Summation/SetValues/unittests/FragmentUnitTest.cpp
===================================================================
--- src/Fragmentation/Summation/SetValues/unittests/FragmentUnitTest.cpp	(revision 291ad92d85f5ff0b403495568c5fcef003bc6416)
+++ src/Fragmentation/Summation/SetValues/unittests/FragmentUnitTest.cpp	(revision d5ca1af98e88b536fe2483fab7d7d2b875452e83)
@@ -81,9 +81,11 @@
   pos[2] = 1.;
   positions += pos;
+  atomicnumbers += 1, 2, 3, 4;
   charges += 1., 2., 3., 4.;
   CPPUNIT_ASSERT_EQUAL( (size_t)3, pos.size() );
   CPPUNIT_ASSERT( positions.size() == charges.size() );
-
-  fragment = new Fragment(positions, charges);
+  CPPUNIT_ASSERT( atomicnumbers.size() == charges.size() );
+
+  fragment = new Fragment(positions, atomicnumbers, charges);
 }
 
@@ -110,4 +112,18 @@
 }
 
+static Fragment::nuclei_t createNucleiFromTriple(
+    const Fragment::positions_t &_positions,
+    const Fragment::atomicnumbers_t &_atomicnumbers,
+    const Fragment::charges_t &_charges
+    )
+{
+  Fragment::nuclei_t returnnuclei;
+  Fragment::positions_t::const_iterator piter = _positions.begin();
+  Fragment::atomicnumbers_t::const_iterator aiter = _atomicnumbers.begin();
+  Fragment::charges_t::const_iterator citer = _charges.begin();
+  for (;piter != _positions.end(); ++piter)
+    returnnuclei.push_back( Fragment::createNucleus(*piter, *aiter, *citer) );
+  return returnnuclei;
+}
 
 /** UnitTest for containsNuclei()
@@ -117,7 +133,5 @@
   {
     // tests present ones for containment
-    Fragment::nuclei_t validnuclei(positions.size());
-    std::transform(positions.begin(), positions.end(),
-        charges.begin(), validnuclei.begin(), Fragment::createNucleus);
+    Fragment::nuclei_t validnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
     BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
       CPPUNIT_ASSERT( fragment->containsNuclei(nucleus) );
@@ -129,11 +143,11 @@
     Fragment::nuclei_t invalidnuclei;
     Fragment::position_t pos(3, -1.);
-    invalidnuclei += Fragment::createNucleus(pos, 1.);
+    invalidnuclei += Fragment::createNucleus(pos, 1, 1.);
     pos[0] = 0.;
-    invalidnuclei += Fragment::createNucleus(pos, 1.);
+    invalidnuclei += Fragment::createNucleus(pos, 1, 1.);
     pos[1] = 0.;
-    invalidnuclei += Fragment::createNucleus(pos, 1.);
+    invalidnuclei += Fragment::createNucleus(pos, 1, 1.);
     pos[2] = -std::numeric_limits<double>::epsilon()*1e+4;
-    invalidnuclei += Fragment::createNucleus(pos, 1.);
+    invalidnuclei += Fragment::createNucleus(pos, 1, 1.);
     BOOST_FOREACH( Fragment::nucleus_t nucleus, invalidnuclei) {
       CPPUNIT_ASSERT( !fragment->containsNuclei(nucleus) );
@@ -149,7 +163,5 @@
     // tests present ones for removal
     size_t size = fragment->nuclei.size();
-    Fragment::nuclei_t validnuclei(positions.size());
-    std::transform(positions.begin(), positions.end(),
-        charges.begin(), validnuclei.begin(), Fragment::createNucleus);
+    Fragment::nuclei_t validnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
     BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
       CPPUNIT_ASSERT_NO_THROW( fragment->removeNuclei(nucleus) );
@@ -161,11 +173,11 @@
     Fragment::nuclei_t invalidnuclei;
     Fragment::position_t pos(3, -1.);
-    invalidnuclei += Fragment::createNucleus(pos, 1.);
+    invalidnuclei += Fragment::createNucleus(pos, 1, 1.);
     pos[0] = 0;
-    invalidnuclei += Fragment::createNucleus(pos, 1.);
+    invalidnuclei += Fragment::createNucleus(pos, 1, 1.);
     pos[1] = 0;
-    invalidnuclei += Fragment::createNucleus(pos, 1.);
+    invalidnuclei += Fragment::createNucleus(pos, 1, 1.);
     pos[2] = -std::numeric_limits<double>::epsilon()*1e+4;
-    invalidnuclei += Fragment::createNucleus(pos, 1.);
+    invalidnuclei += Fragment::createNucleus(pos, 1, 1.);
     BOOST_FOREACH( Fragment::nucleus_t nucleus, invalidnuclei) {
       CPPUNIT_ASSERT_NO_THROW( fragment->removeNuclei(nucleus) );
@@ -178,7 +190,5 @@
 void FragmentTest::equalityNucleus_Test()
 {
-  Fragment::nuclei_t validnuclei(positions.size());
-  std::transform(positions.begin(), positions.end(),
-      charges.begin(), validnuclei.begin(), Fragment::createNucleus);
+  Fragment::nuclei_t validnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
   {
     // create some nuclei
@@ -191,5 +201,5 @@
     // create nucleus at other position
     Fragment::position_t pos(3, 2.);
-    Fragment::nucleus_t unequalposnucleus(pos, 1.);
+    Fragment::nucleus_t unequalposnucleus( Fragment::createNucleus(pos, 1, 1.) );
     BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
       CPPUNIT_ASSERT( nucleus != unequalposnucleus );
@@ -200,5 +210,5 @@
     // create nucleus with different charge
     Fragment::position_t pos(3, 1.);
-    Fragment::nucleus_t unequalchargenucleus(pos, 5.);
+    Fragment::nucleus_t unequalchargenucleus( Fragment::createNucleus(pos, 5, 5.) );
     BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
       CPPUNIT_ASSERT( nucleus != unequalchargenucleus );
@@ -219,7 +229,9 @@
   otherpos[1] = 0.;
   otherpositions += otherpos;
+  Fragment::atomicnumbers_t otheratomicnumbers;
+  otheratomicnumbers += 1, 2, 3;
   Fragment::charges_t othercharges;
   othercharges += 1., 2., 3.;
-  Fragment otherfragment(otherpositions, othercharges);
+  Fragment otherfragment(otherpositions, otheratomicnumbers, othercharges);
 
   CPPUNIT_ASSERT( !(*fragment == otherfragment) );
@@ -253,7 +265,9 @@
   otherpos[1] = 0.;
   otherpositions += otherpos;
+  Fragment::atomicnumbers_t otheratomicnumbers;
+  otheratomicnumbers += 1, 2, 3;
   Fragment::charges_t othercharges;
   othercharges += 1., 2., 3.;
-  Fragment otherfragment(otherpositions, othercharges);
+  Fragment otherfragment(otherpositions, otheratomicnumbers, othercharges);
 
   // check for inequality
@@ -282,7 +296,9 @@
     otherpos[1] = 0.;
     otherpositions += otherpos;
+    Fragment::atomicnumbers_t otheratomicnumbers;
+    otheratomicnumbers += 1, 2, 3;
     Fragment::charges_t othercharges;
     othercharges += 1., 2., 3.;
-    Fragment otherfragment(otherpositions, othercharges);
+    Fragment otherfragment(otherpositions, otheratomicnumbers, othercharges);
     const size_t othersize = otherfragment.nuclei.size();
     const size_t size = fragment->nuclei.size();
@@ -292,10 +308,7 @@
     {
       // tests all for containment
-      Fragment::nuclei_t validnuclei(positions.size()+otherpositions.size());
-      Fragment::nuclei_t::iterator iter =
-          std::transform(positions.begin(), positions.end(),
-          charges.begin(), validnuclei.begin(), Fragment::createNucleus);
-      std::transform(otherpositions.begin(), otherpositions.end(),
-          othercharges.begin(), iter, Fragment::createNucleus);
+      Fragment::nuclei_t validnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
+      Fragment::nuclei_t othervalidnuclei( createNucleiFromTriple(otherpositions, otheratomicnumbers, othercharges) );
+      validnuclei.insert(validnuclei.end(), othervalidnuclei.begin(), othervalidnuclei.end());
       BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
         CPPUNIT_ASSERT( fragment->containsNuclei(nucleus) );
@@ -304,7 +317,5 @@
     {
       // tests positions for no containment in otherfragment
-      Fragment::nuclei_t invalidnuclei(positions.size());
-      std::transform(positions.begin(), positions.end(),
-          charges.begin(), invalidnuclei.begin(), Fragment::createNucleus);
+      Fragment::nuclei_t invalidnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
       BOOST_FOREACH( Fragment::nucleus_t nucleus, invalidnuclei) {
         CPPUNIT_ASSERT( !otherfragment.containsNuclei(nucleus) );
@@ -313,7 +324,5 @@
     {
       // tests otherpositions for containment in otherfragment
-      Fragment::nuclei_t validnuclei(otherpositions.size());
-      std::transform(otherpositions.begin(), otherpositions.end(),
-          othercharges.begin(), validnuclei.begin(), Fragment::createNucleus);
+      Fragment::nuclei_t validnuclei( createNucleiFromTriple(otherpositions, otheratomicnumbers, othercharges) );
       BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
         CPPUNIT_ASSERT( otherfragment.containsNuclei(nucleus) );
@@ -336,7 +345,9 @@
     otherpos[1] = 2.;
     otherpositions += otherpos;
+    Fragment::atomicnumbers_t otheratomicnumbers;
+    otheratomicnumbers += 1, 2, 3;
     Fragment::charges_t othercharges;
     othercharges += 1., 2., 3.;
-    Fragment otherfragment(otherpositions, othercharges);
+    Fragment otherfragment(otherpositions, otheratomicnumbers, othercharges);
     const size_t othersize = otherfragment.nuclei.size();
     const size_t size = fragment->nuclei.size();
@@ -346,10 +357,7 @@
     {
       // tests all for containment
-      Fragment::nuclei_t validnuclei(positions.size()+otherpositions.size());
-      Fragment::nuclei_t::iterator iter =
-          std::transform(positions.begin(), positions.end(),
-          charges.begin(), validnuclei.begin(), Fragment::createNucleus);
-      std::transform(otherpositions.begin(), otherpositions.end(),
-          othercharges.begin(), iter, Fragment::createNucleus);
+      Fragment::nuclei_t validnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
+      Fragment::nuclei_t othervalidnuclei( createNucleiFromTriple(otherpositions, otheratomicnumbers, othercharges) );
+      validnuclei.insert(validnuclei.end(), othervalidnuclei.begin(), othervalidnuclei.end());
       BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
         CPPUNIT_ASSERT( fragment->containsNuclei(nucleus) );
@@ -358,7 +366,8 @@
     {
       // tests positions for no containment in otherfragment (but last)
-      Fragment::nuclei_t invalidnuclei(positions.size()-1);
-      std::transform(positions.begin(), --positions.end(),
-          charges.begin(), invalidnuclei.begin(), Fragment::createNucleus);
+      Fragment::positions_t lesspositions(positions.begin(), --positions.end());
+      Fragment::atomicnumbers_t lessatomicnumbers(atomicnumbers.begin(), --atomicnumbers.end());
+      Fragment::charges_t lesscharges(charges.begin(), --charges.end());
+      Fragment::nuclei_t invalidnuclei( createNucleiFromTriple(lesspositions, lessatomicnumbers, lesscharges) );
       BOOST_FOREACH( Fragment::nucleus_t nucleus, invalidnuclei) {
         CPPUNIT_ASSERT( !otherfragment.containsNuclei(nucleus) );
@@ -367,7 +376,5 @@
     {
       // tests otherpositions for containment in otherfragment
-      Fragment::nuclei_t validnuclei(otherpositions.size());
-      std::transform(otherpositions.begin(), otherpositions.end(),
-          othercharges.begin(), validnuclei.begin(), Fragment::createNucleus);
+      Fragment::nuclei_t validnuclei( createNucleiFromTriple(otherpositions, otheratomicnumbers, othercharges) );
       BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
         CPPUNIT_ASSERT( otherfragment.containsNuclei(nucleus) );
@@ -390,7 +397,9 @@
     otherpos[1] = 0.;
     otherpositions += otherpos;
+    Fragment::atomicnumbers_t otheratomicnumbers;
+    otheratomicnumbers += 1, 2, 3;
     Fragment::charges_t othercharges;
     othercharges += 1., 2., 3.;
-    Fragment otherfragment(otherpositions, othercharges);
+    Fragment otherfragment(otherpositions, otheratomicnumbers, othercharges);
     const size_t othersize = otherfragment.nuclei.size();
     const size_t size = fragment->nuclei.size();
@@ -400,7 +409,5 @@
     {
       // tests positions for containment
-      Fragment::nuclei_t validnuclei(positions.size());
-      std::transform(positions.begin(), positions.end(),
-          charges.begin(), validnuclei.begin(), Fragment::createNucleus);
+      Fragment::nuclei_t validnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
       BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
         CPPUNIT_ASSERT( fragment->containsNuclei(nucleus) );
@@ -409,7 +416,5 @@
     {
       // tests otherpositions for no containment
-      Fragment::nuclei_t invalidnuclei(otherpositions.size());
-      std::transform(otherpositions.begin(), otherpositions.end(),
-          othercharges.begin(), invalidnuclei.begin(), Fragment::createNucleus);
+      Fragment::nuclei_t invalidnuclei( createNucleiFromTriple(otherpositions, otheratomicnumbers, othercharges) );
       BOOST_FOREACH( Fragment::nucleus_t nucleus, invalidnuclei) {
         CPPUNIT_ASSERT( !fragment->containsNuclei(nucleus) );
@@ -418,7 +423,5 @@
     {
       // tests positions for no containment in otherfragment
-      Fragment::nuclei_t invalidnuclei(positions.size());
-      std::transform(positions.begin(), positions.end(),
-          charges.begin(), invalidnuclei.begin(), Fragment::createNucleus);
+      Fragment::nuclei_t invalidnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
       BOOST_FOREACH( Fragment::nucleus_t nucleus, invalidnuclei) {
         CPPUNIT_ASSERT( !otherfragment.containsNuclei(nucleus) );
@@ -427,7 +430,5 @@
     {
       // tests otherpositions for containment in otherfragment
-      Fragment::nuclei_t validnuclei(otherpositions.size());
-      std::transform(otherpositions.begin(), otherpositions.end(),
-          othercharges.begin(), validnuclei.begin(), Fragment::createNucleus);
+      Fragment::nuclei_t validnuclei( createNucleiFromTriple(otherpositions, otheratomicnumbers, othercharges) );
       BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
         CPPUNIT_ASSERT( otherfragment.containsNuclei(nucleus) );
@@ -450,7 +451,9 @@
     otherpos[1] = 2.;
     otherpositions += otherpos;
+    Fragment::atomicnumbers_t otheratomicnumbers;
+    otheratomicnumbers += 1, 2, 3;
     Fragment::charges_t othercharges;
     othercharges += 1., 2., 3.;
-    Fragment otherfragment(otherpositions, othercharges);
+    Fragment otherfragment(otherpositions, otheratomicnumbers, othercharges);
     const size_t othersize = otherfragment.nuclei.size();
     const size_t size = fragment->nuclei.size();
@@ -461,7 +464,5 @@
     {
       // tests all but last for containment
-      Fragment::nuclei_t validnuclei(positions.size());
-      std::transform(positions.begin(), positions.end(),
-          charges.begin(), validnuclei.begin(), Fragment::createNucleus);
+      Fragment::nuclei_t validnuclei( createNucleiFromTriple(positions, atomicnumbers, charges) );
       BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
         if (Fragment::isPositionEqual(nucleus.first, otherpositions[0])) // only test position
@@ -473,7 +474,8 @@
     {
       // tests positions for no containment in otherfragment
-      Fragment::nuclei_t invalidnuclei(positions.size()-1);
-      std::transform(positions.begin(), --positions.end(),
-          charges.begin(), invalidnuclei.begin(), Fragment::createNucleus);
+      Fragment::positions_t lesspositions(positions.begin(), --positions.end());
+      Fragment::atomicnumbers_t lessatomicnumbers(atomicnumbers.begin(), --atomicnumbers.end());
+      Fragment::charges_t lesscharges(charges.begin(), --charges.end());
+      Fragment::nuclei_t invalidnuclei( createNucleiFromTriple(lesspositions, lessatomicnumbers, lesscharges) );
       BOOST_FOREACH( Fragment::nucleus_t nucleus, invalidnuclei) {
         CPPUNIT_ASSERT( !otherfragment.containsNuclei(nucleus) );
@@ -482,7 +484,5 @@
     {
       // tests otherpositions for containment in otherfragment
-      Fragment::nuclei_t validnuclei(otherpositions.size());
-      std::transform(otherpositions.begin(), otherpositions.end(),
-          othercharges.begin(), validnuclei.begin(), Fragment::createNucleus);
+      Fragment::nuclei_t validnuclei( createNucleiFromTriple(otherpositions, otheratomicnumbers, othercharges) );
       BOOST_FOREACH( Fragment::nucleus_t nucleus, validnuclei) {
         CPPUNIT_ASSERT( otherfragment.containsNuclei(nucleus) );
Index: src/Fragmentation/Summation/SetValues/unittests/FragmentUnitTest.hpp
===================================================================
--- src/Fragmentation/Summation/SetValues/unittests/FragmentUnitTest.hpp	(revision 291ad92d85f5ff0b403495568c5fcef003bc6416)
+++ src/Fragmentation/Summation/SetValues/unittests/FragmentUnitTest.hpp	(revision d5ca1af98e88b536fe2483fab7d7d2b875452e83)
@@ -55,4 +55,5 @@
       Fragment *fragment;
       Fragment::positions_t positions;
+      Fragment::atomicnumbers_t atomicnumbers;
       Fragment::charges_t charges;
 };
