Index: src/Actions/FillAction/FillSphericalSurfaceAction.cpp
===================================================================
--- src/Actions/FillAction/FillSphericalSurfaceAction.cpp	(revision 93eae3672fe61ef67bd3ca7888779afb308aa2e0)
+++ src/Actions/FillAction/FillSphericalSurfaceAction.cpp	(revision cb76762d774e30e4704076d9c68d27765141559d)
@@ -20,13 +20,13 @@
 #include "CodePatterns/MemDebug.hpp"
 
-#include "Atom/atom.hpp"
-#include "Atom/CopyAtoms/CopyAtoms_Simple.hpp"
+#include "Atom/CopyAtoms/CopyAtoms_withBonds.hpp"
 #include "CodePatterns/Log.hpp"
 #include "Filling/Cluster.hpp"
 #include "Filling/Filler.hpp"
 #include "Filling/Inserter/Inserter.hpp"
-#include "Filling/Inserter/SimpleInserter.hpp"
+#include "Filling/Inserter/SurfaceInserter.hpp"
 #include "Filling/Mesh/MeshAdaptor.hpp"
 #include "Filling/Predicates/IsVoidNode_FillPredicate.hpp"
+#include "molecule.hpp"
 #include "Shapes/BaseShapes.hpp"
 #include "World.hpp"
@@ -49,18 +49,34 @@
 /** =========== define the function ====================== */
 Action::state_ptr FillSphericalSurfaceAction::performCall() {
-  typedef std::vector<atom*> AtomVector;
-
   // obtain information
   getParametersfromValueStorage();
 
   // check for selected atoms
-  std::vector<atom *> atoms(World::getInstance().getSelectedAtoms());
-  if (atoms.size() == 0) {
-    ELOG(1, "There are no atoms selected.");
+  // get the filler molecule and move to origin
+  const std::vector< molecule *> molecules = World::getInstance().getSelectedMolecules();
+  if (molecules.size() != 1) {
+    ELOG(1, "No exactly one molecule selected, aborting,");
     return Action::failure;
   }
-  AtomIdSet atomIds;
-  BOOST_FOREACH(atom * const _atom, atoms) {
-    atomIds.insert( _atom );
+  molecule *filler = *(molecules.begin());
+  LOG(1, "INFO: Chosen molecule has " << filler->size() << " atoms.");
+
+  // center filler's tip at origin
+  Vector max;
+  filler->CenterEdge(&max);
+
+  // determine center with respect to alignment axis
+  Vector sum = zeroVec;
+  for (molecule::iterator it2=filler->begin();it2 !=filler->end();++it2) {
+    const Vector helper = (**it2).getPosition().partition(params.AlignedAxis).second;
+    sum += helper;
+  }
+  sum *= 1./filler->size();
+
+  // translate molecule's closest atom to origin (such that is resides on the filler spot)
+  LOG(1, "DEBUG: molecule is off Alignment axis by " << sum << ", shifting ...");
+  {
+    Vector translater = -1.*sum;
+    filler->Translate(&translater);
   }
 
@@ -78,11 +94,11 @@
     Mesh *mesh = new MeshAdaptor(func);
     Inserter *inserter = new Inserter(
-        Inserter::impl_ptr(new SimpleInserter));
+        Inserter::impl_ptr(new SurfaceInserter(s, params.AlignedAxis)));
 
     // fill
     {
       Filler *fillerFunction = new Filler(*mesh, *voidnode_predicate, *inserter);
-      ClusterInterface::Cluster_impl cluster( new Cluster( atomIds.getAtomIds(), Sphere()) ); //TODO: calculate true bounding box of atomIds
-      CopyAtoms_Simple copyMethod;
+      ClusterInterface::Cluster_impl cluster( new Cluster( filler->getAtomIds(), filler->getBoundingShape() ) );
+      CopyAtoms_withBonds copyMethod;
       successflag = (*fillerFunction)(copyMethod, cluster);
       delete fillerFunction;
Index: src/Actions/FillAction/FillSphericalSurfaceAction.def
===================================================================
--- src/Actions/FillAction/FillSphericalSurfaceAction.def	(revision 93eae3672fe61ef67bd3ca7888779afb308aa2e0)
+++ src/Actions/FillAction/FillSphericalSurfaceAction.def	(revision cb76762d774e30e4704076d9c68d27765141559d)
@@ -9,12 +9,14 @@
 class atom;
 
+#include "LinearAlgebra/Vector.hpp"
+
 // i.e. there is an integer with variable name Z that can be found in
 // ValueStorage by the token "Z" -> first column: int, Z, "Z"
 // "undefine" if no parameters are required, use (NODEFAULT) for each (undefined) default value
-#define paramtypes (Vector)(double)(int)(double)
-#define paramtokens ("center")("radius")("count")("min-distance")
-#define paramdescriptions ("center of the sphere")("sphere size")("number of instances to be added, changed according to geometric needs")("minimum distance between added instances")
-#define paramdefaults ("0.,0.,0.")(NODEFAULT)("12")("1.")
-#define paramreferences (center)(radius)(N)(mindistance)
+#define paramtypes (Vector)(double)(int)(double)(Vector)
+#define paramtokens ("center")("radius")("count")("min-distance")("Alignment-Axis")
+#define paramdescriptions ("center of the sphere")("sphere size")("number of instances to be added, changed according to geometric needs")("minimum distance between added instances")("The filler molecule is rotated relative to this alignment axis")
+#define paramdefaults ("0.,0.,0.")(NODEFAULT)("12")("1.")(NODEFAULT)
+#define paramreferences (center)(radius)(N)(mindistance)(AlignedAxis)
 
 #undef statetypes 
@@ -31,4 +33,4 @@
 // finally the information stored in the ActionTrait specialization
 #define DESCRIPTION "\
-fill homogenous points on a sphere surface with instances of the selected atoms."
+fill homogenous points on a sphere surface with instances of the selected molecule."
 #undef SHORTFORM
Index: tests/Python/AllActions/options.dat
===================================================================
--- tests/Python/AllActions/options.dat	(revision 93eae3672fe61ef67bd3ca7888779afb308aa2e0)
+++ tests/Python/AllActions/options.dat	(revision cb76762d774e30e4704076d9c68d27765141559d)
@@ -3,4 +3,5 @@
 add-atom	"1"
 add-empty-boundary	""
+Alignment-Axis	"0,0,1"
 angle-x	"0."
 angle-x	"0"
