Index: src/Actions/FillAction/FillSphericalSurfaceAction.cpp
===================================================================
--- src/Actions/FillAction/FillSphericalSurfaceAction.cpp	(revision 2db05382555a391b8fe4741acd08266bfc330545)
+++ src/Actions/FillAction/FillSphericalSurfaceAction.cpp	(revision 2db05382555a391b8fe4741acd08266bfc330545)
@@ -0,0 +1,118 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2010-2012 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * FillSphericalSurfaceAction.cpp
+ *
+ *  Created on: Mar 29, 2012
+ *      Author: heber, bollerhe
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "CodePatterns/MemDebug.hpp"
+
+#include "Atom/atom.hpp"
+#include "Atom/CopyAtoms/CopyAtoms_Simple.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/Mesh/MeshAdaptor.hpp"
+#include "Filling/Predicates/IsVoidNode_FillPredicate.hpp"
+#include "Shapes/BaseShapes.hpp"
+#include "World.hpp"
+
+
+#include <algorithm>
+#include <boost/foreach.hpp>
+#include <boost/function.hpp>
+#include <iostream>
+#include <string>
+#include <vector>
+
+#include "Actions/FillAction/FillSphericalSurfaceAction.hpp"
+
+using namespace MoleCuilder;
+
+// and construct the stuff
+#include "FillSphericalSurfaceAction.def"
+#include "Action_impl_pre.hpp"
+/** =========== 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.");
+    return Action::failure;
+  }
+  AtomIdSet atomIds;
+  BOOST_FOREACH(atom * const _atom, atoms) {
+    atomIds.insert( _atom );
+  }
+
+  // create predicate, mesh, and filler
+  bool successflag = false;
+  {
+    FillPredicate *voidnode_predicate = new FillPredicate(
+        IsVoidNode_FillPredicate(
+            Sphere(zeroVec, params.mindistance)
+            )
+        );
+    Shape s = Sphere(params.center, params.radius);
+    boost::function<const NodeSet ()> func = 
+        boost::bind(&Shape::getHomogeneousPointsOnSurface, boost::ref(s), params.N);
+    Mesh *mesh = new MeshAdaptor(func);
+    Inserter *inserter = new Inserter(
+        Inserter::impl_ptr(new SimpleInserter));
+
+    // 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;
+      successflag = (*fillerFunction)(copyMethod, cluster);
+      delete fillerFunction;
+    }
+
+    // remove
+    delete mesh;
+    delete inserter;
+    delete voidnode_predicate;
+  }
+
+  if (successflag)
+    return Action::success;
+  else
+    return Action::failure;
+}
+
+Action::state_ptr FillSphericalSurfaceAction::performUndo(Action::state_ptr _state) {
+  return Action::failure;
+}
+
+Action::state_ptr FillSphericalSurfaceAction::performRedo(Action::state_ptr _state){
+  return Action::failure;
+}
+
+bool FillSphericalSurfaceAction::canUndo() {
+  return false;
+}
+
+bool FillSphericalSurfaceAction::shouldUndo() {
+  return false;
+}
+/** =========== end of function ====================== */
Index: src/Actions/FillAction/FillSphericalSurfaceAction.def
===================================================================
--- src/Actions/FillAction/FillSphericalSurfaceAction.def	(revision 2db05382555a391b8fe4741acd08266bfc330545)
+++ src/Actions/FillAction/FillSphericalSurfaceAction.def	(revision 2db05382555a391b8fe4741acd08266bfc330545)
@@ -0,0 +1,34 @@
+/*
+ * FillRegularGridAction.def
+ *
+ *  Created on: Mar 29, 2012
+ *      Author: heber, bollerhe
+ */
+
+// all includes and forward declarations necessary for non-integral types below
+class atom;
+
+// 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)
+
+#undef statetypes 
+#undef statereferences 
+
+// some defines for all the names, you may use ACTION, STATE and PARAMS
+#define CATEGORY Fill
+#define MENUNAME "fill"
+#define MENUPOSITION 1
+#define ACTIONNAME SphericalSurface
+#define TOKEN "fill-spherical-surface"
+
+
+// finally the information stored in the ActionTrait specialization
+#define DESCRIPTION "\
+fill homogenous points on a sphere surface with instances of the selected atoms."
+#undef SHORTFORM
Index: src/Actions/FillAction/FillSphericalSurfaceAction.hpp
===================================================================
--- src/Actions/FillAction/FillSphericalSurfaceAction.hpp	(revision 2db05382555a391b8fe4741acd08266bfc330545)
+++ src/Actions/FillAction/FillSphericalSurfaceAction.hpp	(revision 2db05382555a391b8fe4741acd08266bfc330545)
@@ -0,0 +1,22 @@
+/*
+ * FillSphericalSurfaceAction.hpp
+ *
+ *  Created on: Mar 29, 2012
+ *      Author: heber
+ */
+
+#ifndef FILLSPHERICALSURFACEACTION_HPP
+#define FILLSPHERICALSURFACEACTION_HPP
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+
+#include "Actions/Action.hpp"
+
+#include "FillSphericalSurfaceAction.def"
+#include "Action_impl_header.hpp"
+
+#endif // FILLSPHERICALSURFACEACTION_HPP
Index: src/Actions/GlobalListOfActions.hpp
===================================================================
--- src/Actions/GlobalListOfActions.hpp	(revision f4cfb689eb8b160e2dc0434074efead7fdc8c8e0)
+++ src/Actions/GlobalListOfActions.hpp	(revision 2db05382555a391b8fe4741acd08266bfc330545)
@@ -110,5 +110,6 @@
 	(SelectionAtomByOrder) \
 	(FragmentationFragmentation) \
-	(FillRegularGrid)
+	(FillRegularGrid) \
+	(FillSphericalSurface)
 
 #endif /* GLOBALLISTOFACTIONS_HPP_ */
Index: src/Actions/Makefile.am
===================================================================
--- src/Actions/Makefile.am	(revision f4cfb689eb8b160e2dc0434074efead7fdc8c8e0)
+++ src/Actions/Makefile.am	(revision 2db05382555a391b8fe4741acd08266bfc330545)
@@ -178,9 +178,12 @@
 
 FILLACTIONSOURCE = \
-	Actions/FillAction/FillRegularGridAction.cpp
+	Actions/FillAction/FillRegularGridAction.cpp \
+	Actions/FillAction/FillSphericalSurfaceAction.cpp
 FILLACTIONHEADER = \
-	Actions/FillAction/FillRegularGridAction.hpp
+	Actions/FillAction/FillRegularGridAction.hpp \
+	Actions/FillAction/FillSphericalSurfaceAction.hpp
 FILLACTIONDEFS = \
-	Actions/FillAction/FillRegularGridAction.def
+	Actions/FillAction/FillRegularGridAction.def \
+	Actions/FillAction/FillSphericalSurfaceAction.def
 
 
Index: tests/Python/AllActions/options.dat
===================================================================
--- tests/Python/AllActions/options.dat	(revision f4cfb689eb8b160e2dc0434074efead7fdc8c8e0)
+++ tests/Python/AllActions/options.dat	(revision 2db05382555a391b8fe4741acd08266bfc330545)
@@ -35,4 +35,5 @@
 calculate-bounding-box	""
 calculate-molar-mass	""
+center	"10. 10. 10."
 center-in-box	"10 0 0 10 0 10"
 change-box	"10 0 0 10 0 10"
@@ -41,4 +42,5 @@
 convex-file	"convexfile"
 copy-molecule	"0"
+count	"12"
 create-micelle	"200"
 default-molname	"molname"
