Index: src/Actions/AnalysisAction/MolecularVolumeAction.cpp
===================================================================
--- src/Actions/AnalysisAction/MolecularVolumeAction.cpp	(revision 9b8387bbe8a066a5a05ebfc59629199ffa203cb1)
+++ src/Actions/AnalysisAction/MolecularVolumeAction.cpp	(revision 34c43ab2d4d21658cd8b9c3134bf2f845cacdcfc)
@@ -26,4 +26,5 @@
 #include "CodePatterns/Log.hpp"
 #include "CodePatterns/Verbose.hpp"
+#include "PointCloudAdaptor.hpp"
 #include "tesselation.hpp"
 #include "World.hpp"
@@ -51,5 +52,6 @@
     const LinkedCell *LCList = NULL;
     DoLog(0) && (Log() << Verbose(0) << "Evaluating volume of the convex envelope.");
-    LCList = new LinkedCell(*mol, 10.);
+    PointCloudAdaptor< molecule > cloud(mol);
+    LCList = new LinkedCell(cloud, 10.);
     config * const configuration = World::getInstance().getConfig();
     //Boundaries *BoundaryPoints = NULL;
Index: src/Actions/AnalysisAction/SurfaceCorrelationAction.cpp
===================================================================
--- src/Actions/AnalysisAction/SurfaceCorrelationAction.cpp	(revision 9b8387bbe8a066a5a05ebfc59629199ffa203cb1)
+++ src/Actions/AnalysisAction/SurfaceCorrelationAction.cpp	(revision 34c43ab2d4d21658cd8b9c3134bf2f845cacdcfc)
@@ -25,9 +25,11 @@
 #include "CodePatterns/Verbose.hpp"
 #include "CodePatterns/Log.hpp"
+#include "Descriptors/MoleculeIdDescriptor.hpp"
 #include "element.hpp"
+#include "LinearAlgebra/Vector.hpp"
 #include "molecule.hpp"
 #include "periodentafel.hpp"
+#include "PointCloudAdaptor.hpp"
 #include "tesselation.hpp"
-#include "LinearAlgebra/Vector.hpp"
 #include "World.hpp"
 
@@ -57,5 +59,6 @@
   output.open(params.outputname.string().c_str());
   binoutput.open(params.binoutputname.string().c_str());
-  ASSERT(params.Boundary != NULL, "No molecule specified for SurfaceCorrelation.");
+  molecule *surfacemol = const_cast<molecule *>(params.Boundary);
+  ASSERT(surfacemol != NULL, "No molecule specified for SurfaceCorrelation.");
   const double radius = 4.;
   double LCWidth = 20.;
@@ -73,6 +76,7 @@
   std::vector<molecule*> molecules = World::getInstance().getSelectedMolecules();
   std::cout << "There are " << molecules.size() << " selected molecules." << std::endl;
-  LCList = new LinkedCell(*params.Boundary, LCWidth);
-  FindNonConvexBorder(params.Boundary, TesselStruct, LCList, radius, NULL);
+  PointCloudAdaptor<molecule> cloud(surfacemol);
+  LCList = new LinkedCell(cloud, LCWidth);
+  FindNonConvexBorder(surfacemol, TesselStruct, LCList, radius, NULL);
   CorrelationToSurfaceMap *surfacemap = NULL;
   if (params.periodic)
Index: src/Actions/FragmentationAction/ConstructBondGraphAction.cpp
===================================================================
--- src/Actions/FragmentationAction/ConstructBondGraphAction.cpp	(revision 9b8387bbe8a066a5a05ebfc59629199ffa203cb1)
+++ src/Actions/FragmentationAction/ConstructBondGraphAction.cpp	(revision 34c43ab2d4d21658cd8b9c3134bf2f845cacdcfc)
@@ -26,13 +26,15 @@
 #include "bond.hpp"
 #include "bondgraph.hpp"
+#include "CodePatterns/Log.hpp"
+#include "CodePatterns/Verbose.hpp"
 #include "config.hpp"
 #include "linkedcell.hpp"
-#include "CodePatterns/Log.hpp"
-#include "CodePatterns/Verbose.hpp"
 #include "molecule.hpp"
+#include "PointCloudAdaptor.hpp"
 #include "World.hpp"
 #include "WorldTime.hpp"
 
 #include <iostream>
+#include <list>
 #include <string>
 
@@ -86,5 +88,5 @@
   if ((AtomCount > 1) && (BondDistance > 1.)) {
     DoLog(2) && (Log() << Verbose(2) << "Creating Linked Cell structure ... " << endl);
-    LinkedCell::LinkedNodes list;
+    TesselPointSTLList list;
     for (World::AtomSelectionIterator AtomRunner = World::getInstance().beginAtomSelection();
         AtomRunner != World::getInstance().endAtomSelection();
@@ -92,5 +94,6 @@
       list.push_back(AtomRunner->second);
     }
-    LC = new LinkedCell(list, BondDistance);
+    PointCloudAdaptor< TesselPointSTLList > cloud(&list);
+    LC = new LinkedCell(cloud, BondDistance);
 
     // create a list to map Tesselpoint::nr to atom *
@@ -111,8 +114,8 @@
       for (LC->n[1] = 0; LC->n[1] < LC->N[1]; LC->n[1]++)
         for (LC->n[2] = 0; LC->n[2] < LC->N[2]; LC->n[2]++) {
-          const LinkedCell::LinkedNodes *List = LC->GetCurrentCell();
+          const TesselPointSTLList *List = LC->GetCurrentCell();
 //          Log() << Verbose(2) << "Current cell is " << LC->n[0] << ", " << LC->n[1] << ", " << LC->n[2] << " with No. " << LC->index << " containing " << List->size() << " points." << endl;
           if (List != NULL) {
-            for (LinkedCell::LinkedNodes::const_iterator Runner = List->begin();
+            for (TesselPointSTLList::const_iterator Runner = List->begin();
                 Runner != List->end();
                 Runner++) {
@@ -124,8 +127,8 @@
                 for (n[1] = -1; n[1] <= 1; n[1]++)
                   for (n[2] = -1; n[2] <= 1; n[2]++) {
-                    const LinkedCell::LinkedNodes *OtherList = LC->GetRelativeToCurrentCell(n);
+                    const TesselPointSTLList *OtherList = LC->GetRelativeToCurrentCell(n);
 //                    Log() << Verbose(2) << "Current relative cell is " << LC->n[0] << ", " << LC->n[1] << ", " << LC->n[2] << " with No. " << LC->index << " containing " << List->size() << " points." << endl;
                     if (OtherList != NULL) {
-                      for (LinkedCell::LinkedNodes::const_iterator OtherRunner = OtherList->begin(); OtherRunner != OtherList->end(); OtherRunner++) {
+                      for (TesselPointSTLList::const_iterator OtherRunner = OtherList->begin(); OtherRunner != OtherList->end(); OtherRunner++) {
                         if (AtomIds.find(*OtherRunner)->second > AtomIds.find(Walker)->second) {
                           OtherWalker = dynamic_cast<atom*>(*OtherRunner);
Index: src/Actions/TesselationAction/ConvexEnvelopeAction.cpp
===================================================================
--- src/Actions/TesselationAction/ConvexEnvelopeAction.cpp	(revision 9b8387bbe8a066a5a05ebfc59629199ffa203cb1)
+++ src/Actions/TesselationAction/ConvexEnvelopeAction.cpp	(revision 34c43ab2d4d21658cd8b9c3134bf2f845cacdcfc)
@@ -21,10 +21,11 @@
 
 #include "boundary.hpp"
+#include "CodePatterns/Log.hpp"
+#include "CodePatterns/Verbose.hpp"
 #include "config.hpp"
 #include "linkedcell.hpp"
-#include "CodePatterns/Log.hpp"
 #include "molecule.hpp"
+#include "PointCloudAdaptor.hpp"
 #include "tesselation.hpp"
-#include "CodePatterns/Verbose.hpp"
 #include "World.hpp"
 
@@ -55,5 +56,6 @@
     DoLog(1) && (Log() << Verbose(1) << "Storing tecplot convex data in " << params.filenameConvex << "." << endl);
     DoLog(1) && (Log() << Verbose(1) << "Storing tecplot non-convex data in " << params.filenameNonConvex << "." << endl);
-    LCList = new LinkedCell(*mol, 100.);
+    PointCloudAdaptor<molecule> cloud(mol);
+    LCList = new LinkedCell(cloud, 100.);
     //Boundaries *BoundaryPoints = NULL;
     //FindConvexBorder(mol, BoundaryPoints, TesselStruct, LCList, argv[argptr]);
Index: src/Actions/TesselationAction/NonConvexEnvelopeAction.cpp
===================================================================
--- src/Actions/TesselationAction/NonConvexEnvelopeAction.cpp	(revision 9b8387bbe8a066a5a05ebfc59629199ffa203cb1)
+++ src/Actions/TesselationAction/NonConvexEnvelopeAction.cpp	(revision 34c43ab2d4d21658cd8b9c3134bf2f845cacdcfc)
@@ -21,9 +21,10 @@
 
 #include "boundary.hpp"
+#include "CodePatterns/Log.hpp"
+#include "CodePatterns/Verbose.hpp"
 #include "linkedcell.hpp"
-#include "CodePatterns/Log.hpp"
 #include "molecule.hpp"
+#include "PointCloudAdaptor.hpp"
 #include "tesselation.hpp"
-#include "CodePatterns/Verbose.hpp"
 #include "World.hpp"
 
@@ -55,5 +56,6 @@
     DoLog(1) && (Log() << Verbose(1) << "Specified molecule has " << Boundary->getAtomCount() << " atoms." << endl);
     start = clock();
-    LCList = new LinkedCell(*Boundary, params.SphereRadius*2.);
+    PointCloudAdaptor< molecule > cloud(Boundary);
+    LCList = new LinkedCell(cloud, params.SphereRadius*2.);
     Success = FindNonConvexBorder(Boundary, T, LCList, params.SphereRadius, params.filename.string().c_str());
     //FindDistributionOfEllipsoids(T, &LCList, N, number, params.filename.c_str());
