Index: src/Shapes/ShapeOps.cpp
===================================================================
--- src/Shapes/ShapeOps.cpp	(revision 5cdd83b4ee7182af3e7f1f1dc01d45d7e02916a2)
+++ src/Shapes/ShapeOps.cpp	(revision c4864173a791cccb5a29c6f251b4e9352b31020f)
@@ -90,9 +90,15 @@
 
 std::vector<Vector> ShapeOpsBase_impl::getHomogeneousPointsOnSurface(const size_t N) const {
-  return getArg()->getHomogeneousPointsOnSurface(N);
+  std::vector<Vector> PointsOnSurface = getArg()->getHomogeneousPointsOnSurface(N);
+  std::transform(PointsOnSurface.begin(), PointsOnSurface.end(), PointsOnSurface.begin(),
+      boost::bind(&ShapeOpsBase_impl::translateOutPos, this, _1) );
+  return PointsOnSurface;
 }
 
 std::vector<Vector> ShapeOpsBase_impl::getHomogeneousPointsInVolume(const size_t N) const {
-  return getArg()->getHomogeneousPointsInVolume(N);
+  std::vector<Vector> PointsOnSurface = getArg()->getHomogeneousPointsInVolume(N);
+  std::transform(PointsOnSurface.begin(), PointsOnSurface.end(), PointsOnSurface.begin(),
+      boost::bind(&ShapeOpsBase_impl::translateOutPos, this, _1) );
+  return PointsOnSurface;
 }
 
@@ -144,19 +150,4 @@
 }
 
-std::vector<Vector> Resize_impl::getHomogeneousPointsOnSurface(const size_t N) const {
-  std::vector<Vector> PointsOnSurface = getArg()->getHomogeneousPointsOnSurface(N);
-  std::for_each(PointsOnSurface.begin(), PointsOnSurface.end(),
-  		boost::bind(&Vector::operator*, _1, size) );
-  return PointsOnSurface;
-}
-
-std::vector<Vector> Resize_impl::getHomogeneousPointsInVolume(const size_t N) const {
-  std::vector<Vector> PointsOnSurface = getArg()->getHomogeneousPointsInVolume(N);
-  std::for_each(PointsOnSurface.begin(), PointsOnSurface.end(),
-  		boost::bind(&Vector::operator*, _1, size) );
-	return std::vector<Vector>();
-}
-
-
 Shape resize(const Shape &arg,double size){
   Shape::impl_ptr impl = Shape::impl_ptr(new Resize_impl(getShapeImpl(arg),size));
@@ -212,18 +203,4 @@
   sstr << "translate(" << getArg()->toString() << "," << offset << ")";
   return sstr.str();
-}
-
-std::vector<Vector> Translate_impl::getHomogeneousPointsOnSurface(const size_t N) const {
-  std::vector<Vector> PointsOnSurface = getArg()->getHomogeneousPointsOnSurface(N);
-  std::for_each(PointsOnSurface.begin(), PointsOnSurface.end(),
-  		boost::bind(&Vector::operator+, _1, offset) );
-  return PointsOnSurface;
-}
-
-std::vector<Vector> Translate_impl::getHomogeneousPointsInVolume(const size_t N) const {
-  std::vector<Vector> PointsOnSurface = getArg()->getHomogeneousPointsInVolume(N);
-  std::for_each(PointsOnSurface.begin(), PointsOnSurface.end(),
-  		boost::bind(&Vector::operator+, _1, offset) );
-  return PointsOnSurface;
 }
 
@@ -294,18 +271,4 @@
 }
 
-std::vector<Vector> Stretch_impl::getHomogeneousPointsOnSurface(const size_t N) const {
-  std::vector<Vector> PointsOnSurface = getArg()->getHomogeneousPointsOnSurface(N);
-  std::for_each(PointsOnSurface.begin(), PointsOnSurface.end(),
-  		boost::bind( static_cast<void (Vector::*)(const Vector&)>(&Vector::ScaleAll), _1, reciFactors) );
-  return PointsOnSurface;
-}
-
-std::vector<Vector> Stretch_impl::getHomogeneousPointsInVolume(const size_t N) const {
-  std::vector<Vector> PointsOnSurface = getArg()->getHomogeneousPointsInVolume(N);
-  std::for_each(PointsOnSurface.begin(), PointsOnSurface.end(),
-      boost::bind( static_cast<void (Vector::*)(const Vector&)>(&Vector::ScaleAll), _1, reciFactors) );
-  return PointsOnSurface;
-}
-
 Shape stretch(const Shape &arg, const Vector &factors){
   Shape::impl_ptr impl = Shape::impl_ptr(new Stretch_impl(getShapeImpl(arg),factors));
@@ -357,18 +320,4 @@
 }
 
-std::vector<Vector> Transform_impl::getHomogeneousPointsOnSurface(const size_t N) const {
-  std::vector<Vector> PointsOnSurface = getArg()->getHomogeneousPointsOnSurface(N);
-  std::transform( PointsOnSurface.begin(), PointsOnSurface.end(), PointsOnSurface.begin(),
-      boost::bind(static_cast<Vector(*)(const RealSpaceMatrix&,const Vector&)>(operator*), transformation, _1));
-  return PointsOnSurface;
-}
-
-std::vector<Vector> Transform_impl::getHomogeneousPointsInVolume(const size_t N) const {
-  std::vector<Vector> PointsOnSurface = getArg()->getHomogeneousPointsInVolume(N);
-  std::transform( PointsOnSurface.begin(), PointsOnSurface.end(), PointsOnSurface.begin(),
-      boost::bind(static_cast<Vector(*)(const RealSpaceMatrix&,const Vector&)>(operator*), transformation, _1));
-  return PointsOnSurface;
-}
-
 Shape transform(const Shape &arg, const RealSpaceMatrix &transformation){
   Shape::impl_ptr impl = Shape::impl_ptr(new Transform_impl(getShapeImpl(arg),transformation));
Index: src/Shapes/ShapeOps_impl.hpp
===================================================================
--- src/Shapes/ShapeOps_impl.hpp	(revision 5cdd83b4ee7182af3e7f1f1dc01d45d7e02916a2)
+++ src/Shapes/ShapeOps_impl.hpp	(revision c4864173a791cccb5a29c6f251b4e9352b31020f)
@@ -60,6 +60,4 @@
   virtual std::string toString() const;
   virtual bool isInside(const Vector& point) const;
-  virtual std::vector<Vector> getHomogeneousPointsOnSurface(const size_t N) const;
-  virtual std::vector<Vector> getHomogeneousPointsInVolume(const size_t N) const;
 private:
   double size;
@@ -81,6 +79,4 @@
   virtual std::string toString() const;
   virtual bool isInside(const Vector& point) const;
-  virtual std::vector<Vector> getHomogeneousPointsOnSurface(const size_t N) const;
-  virtual std::vector<Vector> getHomogeneousPointsInVolume(const size_t N) const;
 private:
   Vector offset;
@@ -102,6 +98,4 @@
   virtual std::string toString() const;
   virtual bool isInside(const Vector& point) const;
-  virtual std::vector<Vector> getHomogeneousPointsOnSurface(const size_t N) const;
-  virtual std::vector<Vector> getHomogeneousPointsInVolume(const size_t N) const;
 private:
   Vector factors;
@@ -122,6 +116,4 @@
   virtual std::string toString() const;
   virtual bool isInside(const Vector& point) const;
-  virtual std::vector<Vector> getHomogeneousPointsOnSurface(const size_t N) const;
-  virtual std::vector<Vector> getHomogeneousPointsInVolume(const size_t N) const;
 private:
   RealSpaceMatrix transformation;
Index: src/Shapes/unittests/Makefile.am
===================================================================
--- src/Shapes/unittests/Makefile.am	(revision 5cdd83b4ee7182af3e7f1f1dc01d45d7e02916a2)
+++ src/Shapes/unittests/Makefile.am	(revision c4864173a791cccb5a29c6f251b4e9352b31020f)
@@ -50,5 +50,7 @@
 Shape_HomogeneousPointsUnitTest_SOURCES = $(top_srcdir)/src/unittests/UnitTestMain.cpp \
 	../Shapes/unittests/Shape_HomogeneousPointsUnitTest.cpp \
-	../Shapes/unittests/Shape_HomogeneousPointsUnitTest.hpp
+	../Shapes/unittests/Shape_HomogeneousPointsUnitTest.hpp \
+	../Shapes/unittests/stubs/ApproximateShapeAreaStub.cpp \
+	../Shapes/unittests/stubs/ApproximateShapeVolumeStub.cpp
 nodist_Shape_HomogeneousPointsUnitTest_SOURCES = \
 	../Helpers/defs.hpp \
Index: src/Shapes/unittests/Shape_HomogeneousPointsUnitTest.cpp
===================================================================
--- src/Shapes/unittests/Shape_HomogeneousPointsUnitTest.cpp	(revision 5cdd83b4ee7182af3e7f1f1dc01d45d7e02916a2)
+++ src/Shapes/unittests/Shape_HomogeneousPointsUnitTest.cpp	(revision c4864173a791cccb5a29c6f251b4e9352b31020f)
@@ -24,4 +24,5 @@
 #include <cmath>
 #include <limits>
+#include <vector>
 
 #ifdef HAVE_TESTRUNNER
@@ -31,4 +32,5 @@
 #include "CodePatterns/Assert.hpp"
 
+#include "LinearAlgebra/Vector.hpp"
 #include "Shapes/BaseShapes.hpp"
 #include "Shapes/Shape.hpp"
@@ -53,5 +55,18 @@
 void Shape_HomogeneousPointsTest::surfaceTest()
 {
-	CPPUNIT_ASSERT(true);
+  {
+    Shape s = Sphere();
+    std::vector<Vector> nodes = s.getHomogeneousPointsOnSurface(12);
+    CPPUNIT_ASSERT_EQUAL( (size_t)12, nodes.size());
+    for (size_t i=0;i<12;++i)
+      CPPUNIT_ASSERT( s.isOnSurface(nodes[i]) );
+  }
+  {
+    Shape s = Sphere(zeroVec, 2.);
+    std::vector<Vector> nodes = s.getHomogeneousPointsOnSurface(12);
+    CPPUNIT_ASSERT_EQUAL( (size_t)12, nodes.size());
+    for (size_t i=0;i<12;++i)
+      CPPUNIT_ASSERT( s.isOnSurface(nodes[i]) );
+  }
 }
 
@@ -61,4 +76,9 @@
 void Shape_HomogeneousPointsTest::volumeTest()
 {
-	CPPUNIT_ASSERT(true);
+  // is not implemented
+//  Shape s = Sphere();
+//  std::vector<Vector> nodes = s.getHomogeneousPointsInVolume(12);
+//  CPPUNIT_ASSERT_EQUAL( (size_t)12, nodes.size());
+//  for (size_t i=0;i<12;++i)
+//    CPPUNIT_ASSERT( s.isInside(nodes[i]) );
 }
