Index: src/Filling/Makefile.am
===================================================================
--- src/Filling/Makefile.am	(revision 6499b1ee9307f8ecc39caafba8f8083e036a4bd0)
+++ src/Filling/Makefile.am	(revision baac793b97fbf4371eca521187baa79207499a83)
@@ -6,5 +6,6 @@
 	Filling/Predicates/FillPredicate.cpp \
 	Filling/Predicates/IsInsideDomain_FillPredicate.cpp \
-	Filling/Predicates/IsValidInDomain_FillPredicate.cpp
+	Filling/Predicates/IsValidInDomain_FillPredicate.cpp \
+	Filling/Predicates/IsVoidNode_FillPredicate.cpp
 	
 FILLINGHEADER = \
@@ -15,5 +16,6 @@
 	Filling/Predicates/FillPredicate_impl.hpp \
 	Filling/Predicates/IsInsideDomain_FillPredicate.hpp \
-	Filling/Predicates/IsValidInDomain_FillPredicate.hpp
+	Filling/Predicates/IsValidInDomain_FillPredicate.hpp \
+	Filling/Predicates/IsVoidNode_FillPredicate.hpp
 
 
Index: src/Filling/Predicates/IsVoidNode_FillPredicate.cpp
===================================================================
--- src/Filling/Predicates/IsVoidNode_FillPredicate.cpp	(revision baac793b97fbf4371eca521187baa79207499a83)
+++ src/Filling/Predicates/IsVoidNode_FillPredicate.cpp	(revision baac793b97fbf4371eca521187baa79207499a83)
@@ -0,0 +1,72 @@
+/*
+ * Project: MoleCuilder
+ * Description: creates and alters molecular systems
+ * Copyright (C)  2012 University of Bonn. All rights reserved.
+ * Please see the LICENSE file or "Copyright notice" in builder.cpp for details.
+ */
+
+/*
+ * IsVoidNode_FillPredicate.cpp
+ *
+ *  Created on: Jan 16, 2012
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "CodePatterns/MemDebug.hpp"
+
+#include <boost/bind.hpp>
+
+#include "IsVoidNode_FillPredicate.hpp"
+
+#include "CodePatterns/Log.hpp"
+
+#include "Atom/TesselPoint.hpp"
+#include "LinkedCell/LinkedCell_View.hpp"
+#include "Shapes/ShapeOps.hpp"
+#include "Tesselation/tesselation.hpp"
+#include "World.hpp"
+
+#include "AnyFillPredicate.hpp"
+#include "FillPredicate.hpp"
+
+/** Checks whether a given node \a n in the domain is empty with respect to the
+ * given \a shape.
+ *
+ * @param LC View of a linked cell structure for finding neighbors quickly
+ * @param shape shape as a sort of placeholder
+ * @param n point where to center the placeholder
+ * @return true - placeholder at node contains no points,
+ *         false - there is at least one point contained
+ */
+bool IsVoidNode(const LinkedCell::LinkedCell_View &LC, const Shape &shape, const Node &n)
+{
+  LOG(1, "INFO: Node is " << n << ".");
+  LOG(1, "INFO: Original shape is at " << shape.getCenter() << " with radius of "
+      << shape.getRadius() << ".");
+  const Shape shapeAtn = translate(shape, n);
+  LOG(1, "INFO: Translated shape is at " << shapeAtn.getCenter() << ".");
+  LinkedCell::LinkedList neighborlist = LC.getAllNeighbors(
+      shapeAtn.getRadius(), shapeAtn.getCenter());
+  LOG(1, "INFO: we have " << neighborlist.size() << " possible neighbors.");
+  LinkedCell::LinkedList::const_iterator neighboriter =
+      std::find_if(neighborlist.begin(), neighborlist.end(),
+          boost::bind(&Shape::isInside, shapeAtn,
+              boost::bind(&TesselPoint::getPosition, _1) ));
+  return neighboriter == neighborlist.end();
+}
+
+FillPredicate IsVoidNode_FillPredicate(const Shape &_shape)
+{
+  // copy _shape !
+  const LinkedCell::LinkedCell_View LC = World::getInstance().getLinkedCell(_shape.getRadius());
+  AnyFillPredicate::FillPredicator function = boost::bind(&IsVoidNode, LC, _shape, _1);
+  LOG(1, "INFO: Create IsVoidNode_FillPredicate from shape at "
+      << _shape.getCenter() << " and radius " << _shape.getRadius() << ".");
+  FillPredicate::impl_ptr impl(new AnyFillPredicate(function));
+  return FillPredicate(impl);
+}
Index: src/Filling/Predicates/IsVoidNode_FillPredicate.hpp
===================================================================
--- src/Filling/Predicates/IsVoidNode_FillPredicate.hpp	(revision baac793b97fbf4371eca521187baa79207499a83)
+++ src/Filling/Predicates/IsVoidNode_FillPredicate.hpp	(revision baac793b97fbf4371eca521187baa79207499a83)
@@ -0,0 +1,25 @@
+/*
+ * IsVoidNode_FillPredicate.hpp
+ *
+ *  Created on: Jan 16, 2012
+ *      Author: heber
+ */
+
+#ifndef ISVOIDNODE_FILLPREDICATE_HPP_
+#define ISVOIDNODE_FILLPREDICATE_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include "FillPredicate.hpp"
+
+namespace LinkedCell {
+  class LinkedCell_View;
+}
+class Shape;
+
+FillPredicate IsVoidNode_FillPredicate(const Shape &_shape);
+
+#endif /* ISVOIDNODE_FILLPREDICATE_HPP_ */
Index: src/Filling/unittests/IsVoidNode_FillPredicateUnitTest.cpp
===================================================================
--- src/Filling/unittests/IsVoidNode_FillPredicateUnitTest.cpp	(revision baac793b97fbf4371eca521187baa79207499a83)
+++ src/Filling/unittests/IsVoidNode_FillPredicateUnitTest.cpp	(revision baac793b97fbf4371eca521187baa79207499a83)
@@ -0,0 +1,126 @@
+/*
+ * 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.
+ */
+
+/*
+ * IsVoidNode_FillPredicateUnitTest.cpp
+ *
+ *  Created on: Jan 18, 2012
+ *      Author: heber
+ */
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+#include <cppunit/CompilerOutputter.h>
+#include <cppunit/extensions/TestFactoryRegistry.h>
+#include <cppunit/ui/text/TestRunner.h>
+
+#include <algorithm>
+#include <boost/bind.hpp>
+#include <iostream>
+
+#include "CodePatterns/Assert.hpp"
+
+#include "Atom/atom.hpp"
+#include "Box.hpp"
+#include "Filling/Predicates/IsVoidNode_FillPredicate.hpp"
+#include "LinearAlgebra/RealSpaceMatrix.hpp"
+#include "Filling/NodeTypes.hpp"
+#include "Shapes/BaseShapes.hpp"
+#include "Shapes/Shape.hpp"
+#include "World.hpp"
+
+#include "IsVoidNode_FillPredicateUnitTest.hpp"
+
+#ifdef HAVE_TESTRUNNER
+#include "UnitTestMain.hpp"
+#endif /*HAVE_TESTRUNNER*/
+
+/********************************************** Test classes **************************************/
+
+// Registers the fixture into the 'registry'
+CPPUNIT_TEST_SUITE_REGISTRATION( IsVoidNode_FillPredicateTest );
+
+void DoSomething(atom * const _atom)
+{
+  _atom->setPosition( Vector((double)_atom->getId(), 0., 0.) );
+}
+
+void IsVoidNode_FillPredicateTest::setUp()
+{
+  // failing asserts should be thrown
+  ASSERT_DO(Assert::Throw);
+
+  // set default BCs to ignore
+  World::getInstance().getDomain().setConditions(
+      BoundaryConditions::Conditions_t(3, BoundaryConditions::Ignore)
+  );
+
+  // create some atoms as "neighbours"
+  atoms.resize((size_t)5, NULL);
+  std::generate_n(atoms.begin(), (size_t)5, boost::bind(&World::createAtom, World::getPointer()) );
+
+  // position them
+  std::for_each(atoms.begin(), atoms.end(), &DoSomething);
+
+  predicate = new FillPredicate(IsVoidNode_FillPredicate(Sphere()));
+}
+
+
+void IsVoidNode_FillPredicateTest::tearDown()
+{
+  delete predicate;
+
+  World::purgeInstance();
+}
+
+/** Test whether operator() returns as desired
+ *
+ */
+void IsVoidNode_FillPredicateTest::operatorTest()
+{
+#ifndef NDEBUG
+  std::cout << "The following Assertion is intended and does not represent a failure of the test." << std::endl;
+  CPPUNIT_ASSERT_THROW( (*predicate)( Vector(-2.,0.,0.)), Assert::AssertionFailure );
+#else
+  CPPUNIT_ASSERT( (*predicate)( Vector(-2.,0.,0.)) );
+#endif
+  for (double i = 0; i < 5.; ++i) {
+    CPPUNIT_ASSERT( !(*predicate)( Vector(i, 0., 0.)) );
+    CPPUNIT_ASSERT( !(*predicate)( Vector(i, 1., 0.)) );
+#ifndef NDEBUG
+  std::cout << "The following Assertion is intended and does not represent a failure of the test." << std::endl;
+  CPPUNIT_ASSERT_THROW( (*predicate)( Vector(i, -1., 0.)), Assert::AssertionFailure );
+#else
+  CPPUNIT_ASSERT( !(*predicate)( Vector(i, -1., 0.)) );
+#endif
+    CPPUNIT_ASSERT( !(*predicate)( Vector(i, 0., 1.)) );
+#ifndef NDEBUG
+  std::cout << "The following Assertion is intended and does not represent a failure of the test." << std::endl;
+  CPPUNIT_ASSERT_THROW( (*predicate)( Vector(i, 0., -1.)), Assert::AssertionFailure );
+#else
+  CPPUNIT_ASSERT( !(*predicate)( Vector(i, 0., -1.)) );
+#endif
+  }
+  CPPUNIT_ASSERT( (*predicate)( Vector(5.,1.,0.)) );
+#ifndef NDEBUG
+  std::cout << "The following Assertion is intended and does not represent a failure of the test." << std::endl;
+  CPPUNIT_ASSERT_THROW(  (*predicate)( Vector(5.,-1.,0.)), Assert::AssertionFailure );
+#else
+  CPPUNIT_ASSERT( (*predicate)( Vector(5.,-1.,0.)) );
+#endif
+  CPPUNIT_ASSERT( (*predicate)( Vector(5.,0.,1.)) );
+#ifndef NDEBUG
+  std::cout << "The following Assertion is intended and does not represent a failure of the test." << std::endl;
+  CPPUNIT_ASSERT_THROW( (*predicate)( Vector(5.,0.,-1.)), Assert::AssertionFailure );
+#else
+  CPPUNIT_ASSERT( (*predicate)( Vector(5.,0.,-1.)) );
+#endif
+  CPPUNIT_ASSERT( (*predicate)( Vector(6.,0.,0.)) );
+}
Index: src/Filling/unittests/IsVoidNode_FillPredicateUnitTest.hpp
===================================================================
--- src/Filling/unittests/IsVoidNode_FillPredicateUnitTest.hpp	(revision baac793b97fbf4371eca521187baa79207499a83)
+++ src/Filling/unittests/IsVoidNode_FillPredicateUnitTest.hpp	(revision baac793b97fbf4371eca521187baa79207499a83)
@@ -0,0 +1,42 @@
+/*
+ * IsVoidNode_FillPredicateUnitTest.hpp
+ *
+ *  Created on: Jan 18, 2012
+ *      Author: heber
+ */
+
+#ifndef ISVOIDNODE_FILLPREDICATEUNITTEST_HPP_
+#define ISVOIDNODE_FILLPREDICATEUNITTEST_HPP_
+
+// include config.h
+#ifdef HAVE_CONFIG_H
+#include <config.h>
+#endif
+
+
+#include <cppunit/extensions/HelperMacros.h>
+
+#include <vector>
+
+class atom;
+class FillPredicate;
+
+/********************************************** Test classes **************************************/
+
+class IsVoidNode_FillPredicateTest : public CppUnit::TestFixture
+{
+    CPPUNIT_TEST_SUITE( IsVoidNode_FillPredicateTest) ;
+    CPPUNIT_TEST ( operatorTest );
+    CPPUNIT_TEST_SUITE_END();
+
+public:
+      void setUp();
+      void tearDown();
+      void operatorTest();
+
+private:
+      std::vector<atom *> atoms;
+      FillPredicate *predicate;
+};
+
+#endif /* ISVOIDNODE_FILLPREDICATEUNITTEST_HPP_ */
Index: src/Filling/unittests/Makefile.am
===================================================================
--- src/Filling/unittests/Makefile.am	(revision 6499b1ee9307f8ecc39caafba8f8083e036a4bd0)
+++ src/Filling/unittests/Makefile.am	(revision baac793b97fbf4371eca521187baa79207499a83)
@@ -4,13 +4,16 @@
 FILLINGTESTSSOURCES = \
   ../Filling/unittests/IsInsideDomain_FillPredicateUnitTest.cpp \
-  ../Filling/unittests/IsValidInDomain_FillPredicateUnitTest.cpp
+  ../Filling/unittests/IsValidInDomain_FillPredicateUnitTest.cpp \
+  ../Filling/unittests/IsVoidNode_FillPredicateUnitTest.cpp
 
 FILLINGTESTSHEADERS = \
   ../Filling/unittests/IsInsideDomain_FillPredicateUnitTest.hpp \
-  ../Filling/unittests/IsValidInDomain_FillPredicateUnitTest.hpp
+  ../Filling/unittests/IsValidInDomain_FillPredicateUnitTest.hpp \
+  ../Filling/unittests/IsVoidNode_FillPredicateUnitTest.hpp
 
 FILLINGTESTS = \
   IsInsideDomain_FillPredicateUnitTest \
-  IsValidInDomain_FillPredicateUnitTest
+  IsValidInDomain_FillPredicateUnitTest \
+  IsVoidNode_FillPredicateUnitTest
 
 TESTS += $(FILLINGTESTS)
@@ -42,4 +45,15 @@
 	$(BOOST_LIBS)
 
+IsVoidNode_FillPredicateUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
+	../Filling/unittests/IsVoidNode_FillPredicateUnitTest.cpp \
+	../Filling/unittests/IsVoidNode_FillPredicateUnitTest.hpp
+IsVoidNode_FillPredicateUnitTest_LDADD = \
+	../libMolecuilderFilling.la \
+	../libMolecuilderUI.la \
+	../libMolecuilder.la \
+	$(top_builddir)/LinearAlgebra/src/LinearAlgebra/libLinearAlgebra.la \
+	${CodePatterns_LIBS} \
+	$(BOOST_LIBS)
+
 
 #AUTOMAKE_OPTIONS = parallel-tests
