Index: src/linkedcell.cpp
===================================================================
--- src/linkedcell.cpp	(revision 58ed4a7c2bc8ff58164d0438ee813b30de7a34da)
+++ src/linkedcell.cpp	(revision 734816af34f8c7429239e028a7a80e4081d008ab)
@@ -220,5 +220,5 @@
  * \return LinkedAtoms pointer to current cell, NULL if LinkedCell::n[] are out of bounds.
  */
-const LinkedNodes* LinkedCell::GetCurrentCell() const
+const LinkedCell::LinkedNodes* LinkedCell::GetCurrentCell() const
 {
   if (CheckBounds()) {
@@ -234,5 +234,5 @@
  * \return LinkedAtoms pointer to current cell, NULL if LinkedCell::n[]+relative[] are out of bounds.
  */
-const LinkedNodes* LinkedCell::GetRelativeToCurrentCell(const int relative[NDIM]) const
+const LinkedCell::LinkedNodes* LinkedCell::GetRelativeToCurrentCell(const int relative[NDIM]) const
 {
   if (CheckBounds(relative)) {
@@ -302,2 +302,81 @@
 };
 
+/** Returns a list with all neighbours from the current LinkedCell::index.
+ * \param distance (if no distance, then adjacent cells are taken)
+ * \return list of tesselpoints
+ */
+LinkedCell::LinkedNodes* LinkedCell::GetallNeighbours(const double distance = 0) const
+{
+  int N[NDIM], Nlower[NDIM], Nupper[NDIM];
+  TesselPoint *Walker = NULL;
+  LinkedNodes *TesselList = new LinkedNodes;
+
+  // then go through the current and all neighbouring cells and check the contained points for possible candidates
+  //Log() << Verbose(1) << "LC Intervals:";
+  const int step = (distance == 0) ? 1 : (int)floor(distance/RADIUS)+1;
+  for (int i=0;i<NDIM;i++) {
+    Nlower[i] = ((N[i]-step) >= 0) ? N[i]-step : 0;
+    Nupper[i] = ((N[i]+step) < N[i]) ? N[i]+step : N[i]-step;
+    //Log() << Verbose(0) << " [" << Nlower[i] << "," << Nupper[i] << "] ";
+  }
+  //Log() << Verbose(0) << endl;
+  for (n[0] = Nlower[0]; n[0] <= Nupper[0]; n[0]++)
+    for (n[1] = Nlower[1]; n[1] <= Nupper[1]; n[1]++)
+      for (n[2] = Nlower[2]; n[2] <= Nupper[2]; n[2]++) {
+        const LinkedNodes *List = GetCurrentCell();
+        //Log() << Verbose(1) << "Current cell is " << n[0] << ", " << n[1] << ", " << n[2] << " with No. " << index << "." << endl;
+        if (List != NULL) {
+          for (LinkedNodes::const_iterator Runner = List->begin(); Runner != List->end(); Runner++) {
+            Walker = *Runner;
+            TesselList->push_back(Walker);
+          }
+        }
+      }
+  return TesselList;
+};
+
+
+/** Returns a list of all TesselPoint with distance less than \a radius to \a *Center.
+ * \param radius radius of sphere
+ * \param *center center of sphere
+ * \return list of all points inside sphere
+ */
+LinkedCell::LinkedNodes* LinkedCell::GetPointsInsideSphere(const double radius, const Vector * const center) const
+{
+  int N[NDIM], Nlower[NDIM], Nupper[NDIM];
+  const double radiusSquared = radius*radius;
+  TesselPoint *Walker = NULL;
+  LinkedNodes *TesselList = new LinkedNodes;
+
+  if (SetIndexToVector(center)) {
+    for(int i=0;i<NDIM;i++) // store indices of this cell
+    N[i] = n[i];
+    //Log() << Verbose(1) << "INFO: Center cell is " << N[0] << ", " << N[1] << ", " << N[2] << " with No. " << index << "." << endl;
+  } else {
+    DoeLog(1) && (eLog()<< Verbose(1) << "Vector " << *center << " is outside of LinkedCell's bounding box." << endl);
+    return TesselList;
+  }
+  // then go through the current and all neighbouring cells and check the contained points for possible candidates
+  //Log() << Verbose(1) << "LC Intervals:";
+  for (int i=0;i<NDIM;i++) {
+    Nlower[i] = ((N[i]-1) >= 0) ? N[i]-1 : 0;
+    Nupper[i] = ((N[i]+1) < N[i]) ? N[i]+1 : N[i]-1;
+    //Log() << Verbose(0) << " [" << Nlower[i] << "," << Nupper[i] << "] ";
+  }
+  //Log() << Verbose(0) << endl;
+  for (n[0] = Nlower[0]; n[0] <= Nupper[0]; n[0]++)
+    for (n[1] = Nlower[1]; n[1] <= Nupper[1]; n[1]++)
+      for (n[2] = Nlower[2]; n[2] <= Nupper[2]; n[2]++) {
+        const LinkedNodes *List = GetCurrentCell();
+        //Log() << Verbose(1) << "Current cell is " << n[0] << ", " << n[1] << ", " << n[2] << " with No. " << index << "." << endl;
+        if (List != NULL) {
+          for (LinkedNodes::const_iterator Runner = List->begin(); Runner != List->end(); Runner++) {
+            Walker = *Runner;
+            if ((center->DistanceSquared(Walker->node) - radiusSquared) > MYEPSILON) {
+              TesselList->push_back(Walker);
+            }
+          }
+        }
+      }
+  return TesselList;
+};
