Index: src/Tesselation/tesselation.cpp
===================================================================
--- src/Tesselation/tesselation.cpp	(revision bdf6c8a7439f52e0c190c2ba42725d8be969436a)
+++ src/Tesselation/tesselation.cpp	(revision cc21cdf3ae7333553452e11b90d3c2b214c166ea)
@@ -87,4 +87,48 @@
   }
   LOG(0, "This envelope was written to file " << TriangleFilesWritten << " times(s).");
+}
+
+/** Performs tesselation of a given point \a cloud with rolling sphere of
+ * \a SPHERERADIUS.
+ *
+ * @param cloud point cloud to tesselate
+ * @param SPHERERADIUS radius of the rolling sphere
+ */
+void Tesselation::operator()(IPointCloud & cloud, const double SPHERERADIUS)
+{
+  // create linkedcell
+	LinkedCell_deprecated *LinkedList = new LinkedCell_deprecated(cloud, 2.*SPHERERADIUS);
+
+  FindStartingTriangle(SPHERERADIUS, LinkedList);
+
+  CandidateForTesselation *baseline = NULL;
+  BoundaryTriangleSet *T = NULL;
+  bool OneLoopWithoutSuccessFlag = true;
+  bool TesselationFailFlag = false;
+  while ((!OpenLines.empty()) && (OneLoopWithoutSuccessFlag)) {
+    // 2a. fill all new OpenLines
+    for (CandidateMap::iterator Runner = OpenLines.begin(); Runner != OpenLines.end(); Runner++) {
+      baseline = Runner->second;
+      if (baseline->pointlist.empty()) {
+        T = (((baseline->BaseLine->triangles.begin()))->second);
+        //the line is there, so there is a triangle, but only one.
+        TesselationFailFlag = FindNextSuitableTriangle(*baseline, *T, SPHERERADIUS, LinkedList);
+      }
+    }
+
+    // 2b. search for smallest ShortestAngle among all candidates
+    double ShortestAngle = 4.*M_PI;
+    for (CandidateMap::iterator Runner = OpenLines.begin(); Runner != OpenLines.end(); Runner++) {
+      if (Runner->second->ShortestAngle < ShortestAngle) {
+        baseline = Runner->second;
+        ShortestAngle = baseline->ShortestAngle;
+      }
+    }
+    if ((ShortestAngle == 4.*M_PI) || (baseline->pointlist.empty()))
+      OneLoopWithoutSuccessFlag = false;
+    else {
+      AddCandidatePolygon(*baseline, SPHERERADIUS, LinkedList);
+    }
+  }
 }
 
Index: src/Tesselation/tesselation.hpp
===================================================================
--- src/Tesselation/tesselation.hpp	(revision bdf6c8a7439f52e0c190c2ba42725d8be969436a)
+++ src/Tesselation/tesselation.hpp	(revision cc21cdf3ae7333553452e11b90d3c2b214c166ea)
@@ -70,4 +70,5 @@
     virtual ~Tesselation();
 
+    void operator()(IPointCloud & cloud, const double SPHERERADIUS);
     double getVolumeOfConvexEnvelope(const bool IsAngstroem) const;
     double getAreaOfEnvelope(const bool IsAngstroem) const;
Index: src/Tesselation/unittests/TesselationUnitTest.cpp
===================================================================
--- src/Tesselation/unittests/TesselationUnitTest.cpp	(revision bdf6c8a7439f52e0c190c2ba42725d8be969436a)
+++ src/Tesselation/unittests/TesselationUnitTest.cpp	(revision cc21cdf3ae7333553452e11b90d3c2b214c166ea)
@@ -29,4 +29,5 @@
 #include "Helpers/defs.hpp"
 #include "LinkedCell/PointCloudAdaptor.hpp"
+#include "LinkedCell/linkedcell.hpp"
 #include "Tesselation/BoundaryLineSet.hpp"
 #include "Tesselation/BoundaryTriangleSet.hpp"
@@ -73,8 +74,4 @@
   Corners.push_back(Walker);
 
-  // create linkedcell
-  PointCloudAdaptor<TesselPointSTLList> cloud(&Corners, "TesselPointSTLList");
-  LinkedList = new LinkedCell_deprecated(cloud, 2.*SPHERERADIUS);
-
   // create tesselation
   TesselStruct = new Tesselation;
@@ -82,34 +79,6 @@
   CPPUNIT_ASSERT_EQUAL( true, TesselStruct->LinesOnBoundary.empty() );
   CPPUNIT_ASSERT_EQUAL( true, TesselStruct->TrianglesOnBoundary.empty() );
-  TesselStruct->FindStartingTriangle(SPHERERADIUS, LinkedList);
-
-  CandidateForTesselation *baseline = NULL;
-  BoundaryTriangleSet *T = NULL;
-  bool OneLoopWithoutSuccessFlag = true;
-  bool TesselationFailFlag = false;
-  while ((!TesselStruct->OpenLines.empty()) && (OneLoopWithoutSuccessFlag)) {
-    // 2a. fill all new OpenLines
-    for (CandidateMap::iterator Runner = TesselStruct->OpenLines.begin(); Runner != TesselStruct->OpenLines.end(); Runner++) {
-      baseline = Runner->second;
-      if (baseline->pointlist.empty()) {
-        T = (((baseline->BaseLine->triangles.begin()))->second);
-        TesselationFailFlag = TesselStruct->FindNextSuitableTriangle(*baseline, *T, SPHERERADIUS, LinkedList); //the line is there, so there is a triangle, but only one.
-      }
-    }
-
-    // 2b. search for smallest ShortestAngle among all candidates
-    double ShortestAngle = 4.*M_PI;
-    for (CandidateMap::iterator Runner = TesselStruct->OpenLines.begin(); Runner != TesselStruct->OpenLines.end(); Runner++) {
-      if (Runner->second->ShortestAngle < ShortestAngle) {
-        baseline = Runner->second;
-        ShortestAngle = baseline->ShortestAngle;
-      }
-    }
-    if ((ShortestAngle == 4.*M_PI) || (baseline->pointlist.empty()))
-      OneLoopWithoutSuccessFlag = false;
-    else {
-      TesselStruct->AddCandidatePolygon(*baseline, SPHERERADIUS, LinkedList);
-    }
-  }
+  PointCloudAdaptor<TesselPointSTLList> cloud(&Corners, "TesselPointSTLList");
+  (*TesselStruct)(cloud, SPHERERADIUS);
 };
 
@@ -117,5 +86,4 @@
 void TesselationTest::tearDown()
 {
-  delete(LinkedList);
   delete(TesselStruct);
   for (TesselPointSTLList::iterator Runner = Corners.begin(); Runner != Corners.end(); Runner++)
Index: src/Tesselation/unittests/TesselationUnitTest.hpp
===================================================================
--- src/Tesselation/unittests/TesselationUnitTest.hpp	(revision bdf6c8a7439f52e0c190c2ba42725d8be969436a)
+++ src/Tesselation/unittests/TesselationUnitTest.hpp	(revision cc21cdf3ae7333553452e11b90d3c2b214c166ea)
@@ -43,5 +43,4 @@
       class Tesselation *TesselStruct;
       TesselPointSTLList Corners;
-      class LinkedCell_deprecated *LinkedList;
 };
 
Index: src/Tesselation/unittests/Tesselation_InsideOutsideUnitTest.cpp
===================================================================
--- src/Tesselation/unittests/Tesselation_InsideOutsideUnitTest.cpp	(revision bdf6c8a7439f52e0c190c2ba42725d8be969436a)
+++ src/Tesselation/unittests/Tesselation_InsideOutsideUnitTest.cpp	(revision cc21cdf3ae7333553452e11b90d3c2b214c166ea)
@@ -96,5 +96,5 @@
   Corners.push_back(Walker);
 
-  // create linkedcell
+  // create LinkedCell
   PointCloudAdaptor< TesselPointSTLList > cloud(&Corners, "TesselPointSTLList");
   LinkedList = new LinkedCell_deprecated(cloud, 2.*SPHERERADIUS);
@@ -102,44 +102,5 @@
   // create tesselation
   TesselStruct = new Tesselation;
-  TesselStruct->FindStartingTriangle(SPHERERADIUS, LinkedList);
-
-  CandidateForTesselation *baseline = NULL;
-  BoundaryTriangleSet *T = NULL;
-  bool OneLoopWithoutSuccessFlag = true;
-  bool TesselationFailFlag = false;
-  while ((!TesselStruct->OpenLines.empty()) && (OneLoopWithoutSuccessFlag)) {
-    // 2a. fill all new OpenLines
-    LOG(1, "There are " << TesselStruct->OpenLines.size() << " open lines to scan for candidates:");
-    for (CandidateMap::iterator Runner = TesselStruct->OpenLines.begin(); Runner != TesselStruct->OpenLines.end(); Runner++)
-      LOG(2, *(Runner->second));
-
-    for (CandidateMap::iterator Runner = TesselStruct->OpenLines.begin(); Runner != TesselStruct->OpenLines.end(); Runner++) {
-      baseline = Runner->second;
-      if (baseline->pointlist.empty()) {
-        T = (((baseline->BaseLine->triangles.begin()))->second);
-        LOG(1, "Finding best candidate for open line " << *baseline->BaseLine << " of triangle " << *T);
-        TesselationFailFlag = TesselStruct->FindNextSuitableTriangle(*baseline, *T, SPHERERADIUS, LinkedList); //the line is there, so there is a triangle, but only one.
-      }
-    }
-
-    // 2b. search for smallest ShortestAngle among all candidates
-    double ShortestAngle = 4.*M_PI;
-    LOG(1, "There are " << TesselStruct->OpenLines.size() << " open lines to scan for the best candidates:");
-    for (CandidateMap::iterator Runner = TesselStruct->OpenLines.begin(); Runner != TesselStruct->OpenLines.end(); Runner++)
-      LOG(2, *(Runner->second));
-
-    for (CandidateMap::iterator Runner = TesselStruct->OpenLines.begin(); Runner != TesselStruct->OpenLines.end(); Runner++) {
-      if (Runner->second->ShortestAngle < ShortestAngle) {
-        baseline = Runner->second;
-        ShortestAngle = baseline->ShortestAngle;
-        //LOG(1, "New best candidate is " << *baseline->BaseLine << " with point " << *baseline->point << " and angle " << baseline->ShortestAngle);
-      }
-    }
-    if ((ShortestAngle == 4.*M_PI) || (baseline->pointlist.empty()))
-      OneLoopWithoutSuccessFlag = false;
-    else {
-      TesselStruct->AddCandidatePolygon(*baseline, SPHERERADIUS, LinkedList);
-    }
-  }
+  (*TesselStruct)(cloud, SPHERERADIUS);
 };
 
@@ -147,8 +108,8 @@
 void TesselationInOutsideTest::tearDown()
 {
-  delete(LinkedList);
-  delete(TesselStruct);
+	delete LinkedList;
+  delete TesselStruct;
   for (TesselPointSTLList::iterator Runner = Corners.begin(); Runner != Corners.end(); Runner++)
-    delete(*Runner);
+    delete *Runner;
   Corners.clear();
   logger::purgeInstance();
