Index: src/atom.cpp
===================================================================
--- src/atom.cpp	(revision d6f8869464bd2208482a0f62cc438db4939fc16d)
+++ src/atom.cpp	(revision 9df680e1ca4592968b96c9d82a4e85fee43ab4c5)
@@ -49,5 +49,6 @@
     ParticleInfo(pointer),
     father(pointer),
-    sort(&nr)
+    sort(&nr),
+    mol(0)
 {
   setType(pointer->getType());  // copy element of atom
@@ -55,16 +56,8 @@
   AtomicVelocity = pointer->AtomicVelocity; // copy velocity
   FixedIon = pointer->FixedIon;
-  mol = 0;
 };
 
 atom *atom::clone(){
   atom *res = new atom(this);
-  res->father = this;
-  res->sort = &res->nr;
-  res->setType(getType());
-  res->setPosition(this->getPosition());
-  res->AtomicVelocity = this->AtomicVelocity;
-  res->FixedIon = FixedIon;
-  res->mol = 0;
   World::getInstance().registerAtom(res);
   return res;
Index: src/boundary.cpp
===================================================================
--- src/boundary.cpp	(revision d6f8869464bd2208482a0f62cc438db4939fc16d)
+++ src/boundary.cpp	(revision 9df680e1ca4592968b96c9d82a4e85fee43ab4c5)
@@ -852,5 +852,5 @@
         if (DoRandomRotation)
           for (int i=0;i<NDIM;i++)
-            phi[i] = rand()/(RAND_MAX/(2.*M_PI));
+            phi[i] = (rand()/RAND_MAX)*(2.*M_PI);
 
         for(molecule::const_iterator iter = filler->begin(); iter !=filler->end();++iter){
@@ -961,7 +961,9 @@
  * @param Filling molecule whose atoms to check, removed if eventually left
  *        empty.
- */
-void RemoveAtomsOutsideDomain(molecule *&Filling)
-{
+ * @return true - atoms had to be removed, false - no atoms have been removed
+ */
+bool RemoveAtomsOutsideDomain(molecule *&Filling)
+{
+  bool status = false;
   Box &Domain = World::getInstance().getDomain();
   // check if all is still inside domain
@@ -969,4 +971,5 @@
     // check whether each atom is inside box
     if (!Domain.isInside((*miter)->getPosition())) {
+      status = true;
       atom *Walker = *miter;
       ++miter;
@@ -980,4 +983,5 @@
     World::getInstance().destroyMolecule(Filling);
   }
+  return status;
 }
 
@@ -1069,6 +1073,8 @@
     }
 
-  // Center filler at origin
-  filler->CenterEdge(&Inserter);
+  // Center filler at its center of gravity
+  Vector *gravity = filler->DetermineCenterOfGravity();
+  filler->CenterAtVector(gravity);
+  delete gravity;
   //const int FillerCount = filler->getAtomCount();
   DoLog(2) && (Log() << Verbose(2) << "INFO: Filler molecule has the following bonds:" << endl);
@@ -1124,20 +1130,24 @@
           DoLog(1) && (Log() << Verbose(1) << "INFO: Position at " << Inserter << " is void point." << endl);
           // fill!
-          if (firstInsertion) { // use filler as first molecule
+          Filling = filler->CopyMolecule();
+          RandomizeMoleculePositions(Filling, RandomAtomDisplacement, Rotations);
+          // translation
+          Filling->Translate(&Inserter);
+          // remove out-of-bounds atoms
+          const bool status = RemoveAtomsOutsideDomain(Filling);
+          if ((firstInsertion) && (!status)) { // no atom has been removed
+            // remove copied atoms and molecule again
+            Filling->removeAtomsinMolecule();
+            World::getInstance().destroyMolecule(Filling);
+            // and mark is final filler position
             Filling = filler;
             firstInsertion = false;
             firstInserter = Inserter;
-          } else { // copy from filler molecule
-            Filling = filler->CopyMolecule();
-            RandomizeMoleculePositions(Filling, RandomAtomDisplacement, Rotations);
-            // translation
-            Filling->Translate(&Inserter);
-            // remove out-of-bounds atoms
-            RemoveAtomsOutsideDomain(Filling);
+          } else {
             // TODO: Remove when World has no MoleculeListClass anymore
             MolList->insert(Filling);
           }
         } else {
-          DoLog(1) && (Log() << Verbose(1) << "INFO: Position at " << Inserter << " is non-void point, within boundary or outside of MaxDistance." << endl);
+         DoLog(1) && (Log() << Verbose(1) << "INFO: Position at " << Inserter << " is non-void point, within boundary or outside of MaxDistance." << endl);
           continue;
         }
Index: src/molecule.cpp
===================================================================
--- src/molecule.cpp	(revision d6f8869464bd2208482a0f62cc438db4939fc16d)
+++ src/molecule.cpp	(revision 9df680e1ca4592968b96c9d82a4e85fee43ab4c5)
@@ -678,4 +678,14 @@
 
 
+/** Destroys all atoms inside this molecule.
+ */
+void molecule::removeAtomsinMolecule()
+{
+  // remove each atom from world
+  for(molecule::const_iterator AtomRunner = begin(); !empty(); AtomRunner = begin())
+    World::getInstance().destroyAtom(*AtomRunner);
+};
+
+
 /**
  * Copies all atoms of a molecule which are within the defined parallelepiped.
Index: src/molecule.hpp
===================================================================
--- src/molecule.hpp	(revision d6f8869464bd2208482a0f62cc438db4939fc16d)
+++ src/molecule.hpp	(revision 9df680e1ca4592968b96c9d82a4e85fee43ab4c5)
@@ -171,4 +171,5 @@
   bool UnlinkAtom(atom *pointer);
   bool CleanupMolecule();
+  void removeAtomsinMolecule();
 
   /// Add/remove atoms to/from molecule.
