Index: src/Actions/FillAction/FillRegularGridAction.cpp
===================================================================
--- src/Actions/FillAction/FillRegularGridAction.cpp	(revision 5a4cbcba2db951efef5711b10c3f27755464e607)
+++ src/Actions/FillAction/FillRegularGridAction.cpp	(revision 345eda8ba424c9dbb13488e397cd25c45027d9bc)
@@ -27,9 +27,18 @@
 #include "Filling/Filler.hpp"
 #include "Filling/Mesh/CubeMesh.hpp"
+#include "Filling/Predicates/IsInsideSurface_FillPredicate.hpp"
 #include "Filling/Predicates/IsVoidNode_FillPredicate.hpp"
+#include "Filling/Predicates/Ops_FillPredicate.hpp"
+#include "LinkedCell/linkedcell.hpp"
+#include "LinkedCell/PointCloudAdaptor.hpp"
+#include "molecule.hpp"
 #include "MoleculeListClass.hpp"
 #include "Parser/FormatParserInterface.hpp"
 #include "Parser/FormatParserStorage.hpp"
 #include "Shapes/BaseShapes.hpp"
+#include "Tesselation/tesselation.hpp"
+#include "Tesselation/BoundaryLineSet.hpp"
+#include "Tesselation/BoundaryTriangleSet.hpp"
+#include "Tesselation/CandidateForTesselation.hpp"
 #include "World.hpp"
 
@@ -111,9 +120,49 @@
   LOG(2, "INFO: Created cluster of size " << atomset.size() << ".");
 
+  // check for selected molecules and create surfaces from them
+  const std::vector<molecule *> molecules = World::getInstance().getSelectedMolecules();
+  typedef std::list<FillPredicate *> predicate_list_t;
+  typedef std::list<LinkedCell_deprecated *> LC_list_t;
+  typedef std::list<Tesselation *> Tesselation_list_t;
+  predicate_list_t surface_predicate_list;
+  LC_list_t LinkedCell_deprecated_list;
+  Tesselation_list_t Tesselation_list;
+  if (params.SphereRadius != 0.) {
+    if ( molecules.size() == 0) {
+      ELOG(1, "You have given a sphere radius " << params.SphereRadius
+          << " != 0, but have not select any molecules.");
+    }
+    for (std::vector<molecule *>::const_iterator iter = molecules.begin();
+        iter != molecules.end(); ++iter) {
+      // create adaptor for the current molecule
+      PointCloudAdaptor< molecule > cloud(*iter, (*iter)->name);
+      LinkedCell_deprecated_list.push_back(
+          new LinkedCell_deprecated(cloud, 2.*params.SphereRadius)
+      );
+
+      // create tesselation
+      Tesselation_list.push_back(
+          new Tesselation
+      );
+      (*Tesselation_list.back())(cloud, params.SphereRadius);
+
+      // and create predicate
+      surface_predicate_list.push_back(
+          new FillPredicate( IsInsideSurface_FillPredicate(
+              *Tesselation_list.back(),
+              *LinkedCell_deprecated_list.back()) )
+      );
+    }
+  }
+
   // create predicate, mesh, and filler
   {
-    FillPredicate *predicate = new FillPredicate( IsVoidNode_FillPredicate(*s) );
+    FillPredicate *voidnode_predicate = new FillPredicate( IsVoidNode_FillPredicate(*s) );
+    FillPredicate Andpredicate = (*voidnode_predicate);
+    for (predicate_list_t::iterator iter = surface_predicate_list.begin();
+        iter != surface_predicate_list.end(); ++iter)
+      Andpredicate = (Andpredicate) && !(**iter);
     Mesh *mesh = new CubeMesh(params.counts, params.offset, World::getInstance().getDomain().getM());
-    Filler *fillerFunction = new Filler(*mesh, *predicate);
+    Filler *fillerFunction = new Filler(*mesh, Andpredicate);
 
     // fill
@@ -124,5 +173,13 @@
     delete fillerFunction;
     delete mesh;
-    delete predicate;
+    delete voidnode_predicate;
+    for (LC_list_t::iterator iter = LinkedCell_deprecated_list.begin();
+            iter != LinkedCell_deprecated_list.end(); ++iter)
+      delete (*iter);
+    LinkedCell_deprecated_list.clear();
+    for (Tesselation_list_t::iterator iter = Tesselation_list.begin();
+            iter != Tesselation_list.end(); ++iter)
+      delete (*iter);
+    Tesselation_list.clear();
     delete s;
   }
Index: src/Actions/FillAction/FillRegularGridAction.def
===================================================================
--- src/Actions/FillAction/FillRegularGridAction.def	(revision 5a4cbcba2db951efef5711b10c3f27755464e607)
+++ src/Actions/FillAction/FillRegularGridAction.def	(revision 345eda8ba424c9dbb13488e397cd25c45027d9bc)
@@ -12,9 +12,9 @@
 // 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)(Vector)(double)
-#define paramtokens ("mesh-size")("mesh-offset")("min-distance")
-#define paramdescriptions ("number of points per axis")("offset to start of partition, must be in [0,1)")("Minimum distance to other atoms")
-#define paramdefaults (NODEFAULT)("0.,0.,0.")("1.")
-#define paramreferences (counts)(offset)(mindistance)
+#define paramtypes (Vector)(Vector)(double)(double)
+#define paramtokens ("mesh-size")("mesh-offset")("min-distance")("tesselation-radius")
+#define paramdescriptions ("number of points per axis")("offset to start of partition, must be in [0,1)")("Minimum distance to other atoms")("radius of rolling sphere in tesselating selected molecule's surfaces")
+#define paramdefaults (NODEFAULT)("0.,0.,0.")("1.")("0.")
+#define paramreferences (counts)(offset)(mindistance)(SphereRadius)
 
 #define statetypes (std::vector<atom *>)
