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;
 };
