diff --git a/src/GridGenerator/grid/GridImp.cu b/src/GridGenerator/grid/GridImp.cu
index 536c28e8430b48b723c744f306307c569620e41c..ff1e7651cbc9bd732cb5f48dded86a51da4967a8 100644
--- a/src/GridGenerator/grid/GridImp.cu
+++ b/src/GridGenerator/grid/GridImp.cu
@@ -204,8 +204,8 @@ HOSTDEVICE void GridImp::findStopperNode(uint index)
     if(isValidEndOfGridStopper(index))
         this->field.setFieldEntryToStopperEndOfGrid(index);
 
-    if (isValidStartOfGridStopper(index))
-        this->field.setFieldEntryToStopperEndOfGrid(index);
+    if (isValidInnerStopper(index))
+        this->field.setFieldEntryToStopperOverlapGrid(index);
 }
 
 HOSTDEVICE void GridImp::removeOddBoundaryCellNode(uint index)
@@ -254,15 +254,16 @@ HOSTDEVICE bool GridImp::isNode(uint index, char type) const
     return field.is(index, type);
 }
 
-
-HOSTDEVICE bool GridImp::isValidStartOfGridStopper(uint index) const
+HOSTDEVICE bool GridImp::isValidEndOfGridStopper(uint index) const
 {
-    return this->field.is(index, OUT_OF_GRID) && (nodeInNextCellIs(index, FLUID) || nodeInNextCellIs(index, FLUID_CFF));
+    return this->field.is(index, OUT_OF_GRID) && (nodeInNextCellIs(index, FLUID) || nodeInNextCellIs(index, FLUID_CFF))
+        || this->field.is(index, OUT_OF_GRID) && (nodeInPreviousCellIs(index, FLUID) || nodeInPreviousCellIs(index, FLUID_CFF));
 }
 
-HOSTDEVICE bool GridImp::isValidEndOfGridStopper(uint index) const
+HOSTDEVICE bool GridImp::isValidInnerStopper(uint index) const
 {
-    return this->field.is(index, OUT_OF_GRID) && (nodeInPreviousCellIs(index, FLUID) || nodeInPreviousCellIs(index, FLUID_CFF));
+    return this->field.is(index, SOLID) && (nodeInNextCellIs(index, FLUID) || nodeInNextCellIs(index, FLUID_CFF))
+        || this->field.is(index, SOLID) && (nodeInPreviousCellIs(index, FLUID) || nodeInPreviousCellIs(index, FLUID_CFF));
 }
 
 
@@ -424,7 +425,7 @@ HOST void GridImp::updateSparseIndices()
     int newIndex = 0;
     for (uint index = 0; index < size; index++)
     {
-        if (this->field.isInvalid(index) || this->field.isOutOfGrid(index))
+        if (this->field.isInvalid(index) || this->field.isOutOfGrid(index) || this->field.isSolid(index))
         {
             sparseIndices[index] = -1;
             removedNodes++;
@@ -558,7 +559,7 @@ HOST void GridImp::mesh(Object* object)
 {
     TriangularMesh* triangularMesh = dynamic_cast<TriangularMesh*>(object);
     if (triangularMesh)
-        triangularMeshDiscretizationStrategy->discretize(triangularMesh, this, OUT_OF_GRID, FLUID);
+        triangularMeshDiscretizationStrategy->discretize(triangularMesh, this, SOLID, FLUID);
     else
         gridStrategy->findInnerNodes(shared_from_this());
 
diff --git a/src/GridGenerator/grid/GridImp.h b/src/GridGenerator/grid/GridImp.h
index a6c3d2df0924563e8522db0bfa256b9ff6e47260..adad56d3abd6ce6d61e88c445e8dec4404db0db2 100644
--- a/src/GridGenerator/grid/GridImp.h
+++ b/src/GridGenerator/grid/GridImp.h
@@ -33,7 +33,7 @@ public:
 private:
     HOST void initalNumberOfNodesAndSize();
     HOSTDEVICE Cell getOddCellFromIndex(uint index) const;
-    HOSTDEVICE bool isValidStartOfGridStopper(uint index) const;
+    HOSTDEVICE bool isValidInnerStopper(uint index) const;
     HOSTDEVICE bool isValidEndOfGridStopper(uint index) const;
     HOSTDEVICE bool isOutSideOfGrid(Cell &cell) const;
     HOSTDEVICE bool contains(Cell &cell, char type) const;