Index: src/Filling/Filler.cpp
===================================================================
--- src/Filling/Filler.cpp	(revision 93eae3672fe61ef67bd3ca7888779afb308aa2e0)
+++ src/Filling/Filler.cpp	(revision 42b6de7c684d4c908777f116dccaf00a8e479cf2)
@@ -46,13 +46,4 @@
 
 
-/** Constructor for class Filler.
- *
- * \note We store inverted \a _predicate because we need it only for
- * remove_copy_if which works in this inverted way as desired.
- *
- * @param _mesh Mesh with a NodeSet that fills its Shape
- * @param _predicate predicate construct to check at each Node
- * @param _inserter inserter which places the cloned cluster
- */
 Filler::Filler(const Mesh &_mesh, const FillPredicate &_predicate, const Inserter &_inserter) :
   mesh(_mesh),
@@ -61,21 +52,11 @@
 {}
 
-/** Destructor for class Filler.
- *
- */
 Filler::~Filler()
 {}
 
-/** Fill in the desired Cluster at each remaining node.
- *
- * \note The cluster is non-const because it is moved to the first vacant node.
- *
- * @param copyMethod functor that knows how to copy atoms.
- * @param cluster set of atomic ids contained in a specific Shape to fill each Node with
- * @return true - at least one node has been filled, false - no node filled
- */
 bool Filler::operator()(
     CopyAtomsInterface &copyMethod,
-    ClusterInterface::Cluster_impl cluster) const
+    ClusterInterface::Cluster_impl cluster,
+    ClusterVector_t &ClonedClusters) const
 {
   const NodeSet &nodes = mesh.getNodes();
@@ -126,7 +107,7 @@
 
   // clone clusters
-  std::vector<ClusterInterface::Cluster_impl> clusters(FillNodes.size());
+  ClonedClusters.resize(FillNodes.size());
   {
-    std::vector<ClusterInterface::Cluster_impl>::iterator clusteriter = clusters.begin();
+    std::vector<ClusterInterface::Cluster_impl>::iterator clusteriter = ClonedClusters.begin();
     *clusteriter = cluster;
     clusteriter++;
@@ -140,7 +121,7 @@
     // returns true, we'll have the iterator pointing at first cluster
     std::vector<ClusterInterface::Cluster_impl>::const_iterator inserteriter =
-      std::search(clusters.begin(), clusters.end(), FillNodes.begin(), FillNodes.end(),
+      std::search(ClonedClusters.begin(), ClonedClusters.end(), FillNodes.begin(), FillNodes.end(),
           boost::bind(&Inserter::operator(), boost::cref(inserter), _1, _2));
-    if( inserteriter != clusters.begin()) {
+    if( inserteriter != ClonedClusters.begin()) {
       ELOG(1, "Not all cloned clusters could be successfully inserted.");
       return false;
@@ -150,8 +131,8 @@
   // create molecules for each cluster and fill in atoms
   {
-    std::vector<molecule *> molecules(clusters.size()-1, NULL);
+    std::vector<molecule *> molecules(ClonedClusters.size()-1, NULL);
     std::generate_n(molecules.begin(), FillNodes.size()-1,
         boost::bind(&World::createMolecule, World::getPointer()) );
-    std::vector<ClusterInterface::Cluster_impl>::const_iterator clusteriter = clusters.begin();
+    std::vector<ClusterInterface::Cluster_impl>::const_iterator clusteriter = ClonedClusters.begin();
     ++clusteriter;
     std::vector<molecule *>::iterator moliter = molecules.begin();
@@ -164,8 +145,5 @@
 
   // give final statment on whether at least \a single cluster has been placed
-  if ( FillNodes.size() != 0)
-    return true;
-  else
-    return false;
+  return ( FillNodes.size() != 0);
 }
 
Index: src/Filling/Filler.hpp
===================================================================
--- src/Filling/Filler.hpp	(revision 93eae3672fe61ef67bd3ca7888779afb308aa2e0)
+++ src/Filling/Filler.hpp	(revision 42b6de7c684d4c908777f116dccaf00a8e479cf2)
@@ -14,4 +14,6 @@
 #include <config.h>
 #endif
+
+#include <vector>
 
 #include "Cluster.hpp"
@@ -32,10 +34,36 @@
 {
 public:
+  /** Constructor for class Filler.
+   *
+   * \note We store inverted \a _predicate because we need it only for
+   * remove_copy_if which works in this inverted way as desired.
+   *
+   * @param _mesh Mesh with a NodeSet that fills its Shape
+   * @param _predicate predicate construct to check at each Node
+   * @param _inserter inserter which places the cloned cluster
+   */
   Filler(const Mesh &_mesh, const FillPredicate &_predicate, const Inserter &_inserter);
+
+  /** Destructor for class Filler.
+   *
+   */
   ~Filler();
 
-  bool operator()(CopyAtomsInterface &copyMethod, ClusterInterface::Cluster_impl cluster) const;
+  //!> typedef Vector of clusters as return type for operator()
+  typedef std::vector<ClusterInterface::Cluster_impl> ClusterVector_t;
+
+  /** Fill in the desired Cluster at each remaining node.
+   *
+   * \note The cluster is non-const because it is moved to the first vacant node.
+   *
+   * @param copyMethod functor that knows how to copy atoms.
+   * @param cluster set of atomic ids contained in a specific Shape to fill each Node with
+   * @param ClonedClusters reference to vector of clusters, that is filled with created clones
+   * @return true - all clusters inserted succesfully, else - insertion failed
+   */
+  bool operator()(CopyAtomsInterface &copyMethod, ClusterInterface::Cluster_impl cluster, ClusterVector_t &ClonedClusters) const;
 
 private:
+
   //!> mesh is the set of points filling a Shape
   const Mesh mesh;
Index: src/Filling/unittests/FillerUnitTest.cpp
===================================================================
--- src/Filling/unittests/FillerUnitTest.cpp	(revision 93eae3672fe61ef67bd3ca7888779afb308aa2e0)
+++ src/Filling/unittests/FillerUnitTest.cpp	(revision 42b6de7c684d4c908777f116dccaf00a8e479cf2)
@@ -115,7 +115,9 @@
 {
   CopyAtoms_Simple copyMethod;
-  (*filler)(copyMethod, *cluster);
+  Filler::ClusterVector_t ClonedClusters;
+  (*filler)(copyMethod, *cluster, ClonedClusters);
 
   // one atom at 5 nodes added
+  CPPUNIT_ASSERT_EQUAL( mesh->getNodes().size(), ClonedClusters.size() );
   CPPUNIT_ASSERT_EQUAL( mesh->getNodes().size()*2, World::getInstance().getAllAtoms().size() );
 }
