diff --git a/src/GridGenerator/grid/Grid.h b/src/GridGenerator/grid/Grid.h
index 2af4ce5f74b371be35d6eb00d302f23820af7b5e..178c9d6c708a1b7a389802aba5eebce18db478e3 100644
--- a/src/GridGenerator/grid/Grid.h
+++ b/src/GridGenerator/grid/Grid.h
@@ -10,7 +10,7 @@ struct Vertex;
 struct Triangle;
 class GridStrategy;
 class GridInterface;
-
+class Object;
 
 class VF_PUBLIC Grid
 {
@@ -68,6 +68,7 @@ public:
 
     HOST virtual void findGridInterface(SPtr<Grid> grid) = 0;
     HOST virtual void mesh(TriangularMesh& geometry) = 0;
+    HOST virtual void mesh(Object* object) = 0;
 
 
     HOST virtual void setPeriodicity(bool periodicityX, bool periodicityY, bool periodicityZ) = 0;
diff --git a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp
index 8ff88524af74f2649c30d7a327ca29c3bdbd5242..28340b1bb535bb667f4fae61fe0081e2a8755598 100644
--- a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp
+++ b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp
@@ -22,6 +22,12 @@ void MultipleGridBuilder::addCoarseGrid(real startX, real startY, real startZ, r
     addGridToList(grid);
 }
 
+void MultipleGridBuilder::addGeometry(Object* solidObject)
+{
+    this->solidObject = solidObject;
+}
+
+
 void MultipleGridBuilder::addGrid(Object* gridShape)
 {
     if (!coarseGridExists())
@@ -232,6 +238,10 @@ void MultipleGridBuilder::buildGrids()
     for (auto grid : grids)
         grid->inital();
 
+
+     for (auto grid : grids)
+          grid->mesh(solidObject);
+
     for (size_t i = 0; i < grids.size() - 1; i++)
         grids[i]->findGridInterface(grids[i + 1]);
 
diff --git a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h
index a272a4b2ec21565ccd244b96f1bbbfb51a1a73ac..666b652e2a5573294927f00543c6ba3fafa9f6f7 100644
--- a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h
+++ b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h
@@ -26,6 +26,8 @@ public:
     VF_PUBLIC void addGrid(Object* gridShape);
     VF_PUBLIC void addGrid(Object* gridShape, uint levelFine);
 
+    VF_PUBLIC void addGeometry(Object* gridShape);
+
     VF_PUBLIC uint getNumberOfLevels() const;
     VF_PUBLIC real getDelta(uint level) const;
 
@@ -64,7 +66,7 @@ private:
     //std::vector<SPtr<Grid> > grids;
 
     SPtr<GridFactory> gridFactory;
- 
+    Object* solidObject;
 };
 
 #endif
diff --git a/src/GridGenerator/grid/GridImp.cu b/src/GridGenerator/grid/GridImp.cu
index 13bd996ae435506a8894ce376472d8b431c4a863..536c28e8430b48b723c744f306307c569620e41c 100644
--- a/src/GridGenerator/grid/GridImp.cu
+++ b/src/GridGenerator/grid/GridImp.cu
@@ -554,6 +554,18 @@ HOSTDEVICE void GridImp::findOverlapStopper(uint index, GridImp& finerGrid)
 // --------------------------------------------------------- //
 //                    Mesh Triangle                          //
 // --------------------------------------------------------- //
+HOST void GridImp::mesh(Object* object)
+{
+    TriangularMesh* triangularMesh = dynamic_cast<TriangularMesh*>(object);
+    if (triangularMesh)
+        triangularMeshDiscretizationStrategy->discretize(triangularMesh, this, OUT_OF_GRID, FLUID);
+    else
+        gridStrategy->findInnerNodes(shared_from_this());
+
+    gridStrategy->findStopperNodes(shared_from_this());
+}
+
+
 HOST void GridImp::mesh(TriangularMesh &triangularMesh)
 {
     const clock_t begin = clock();
diff --git a/src/GridGenerator/grid/GridImp.h b/src/GridGenerator/grid/GridImp.h
index a07421b57bbdfe41362465d72f82cc6ec31ea82d..a6c3d2df0924563e8522db0bfa256b9ff6e47260 100644
--- a/src/GridGenerator/grid/GridImp.h
+++ b/src/GridGenerator/grid/GridImp.h
@@ -166,6 +166,8 @@ private:
 public:
     HOSTDEVICE BoundingBox getBoundingBoxOnNodes(Triangle &triangle) const;
 
+    HOST void mesh(Object* object) override;
+
     HOST void mesh(TriangularMesh &geometry) override;
     HOSTDEVICE void mesh(Triangle &triangle);
     HOSTDEVICE void meshReverse(Triangle &triangle);
diff --git a/src/GridGenerator/grid/GridMocks.h b/src/GridGenerator/grid/GridMocks.h
index 0f8c932a3b2e90f054c4a7bb79f3cff1b8dd0e9a..acc119c2c49c2cb0b00f5c444811035a4d825dc2 100644
--- a/src/GridGenerator/grid/GridMocks.h
+++ b/src/GridGenerator/grid/GridMocks.h
@@ -66,6 +66,7 @@ public:
     virtual void findSparseIndices(SPtr<Grid> fineGrid) override {}
     virtual Vertex getMinimumOnNode(Vertex exact) const override { return Vertex(0, 0, 0); }
     virtual Vertex getMaximumOnNode(Vertex exact) const override { return Vertex(0, 0, 0); }
+    virtual void mesh(Object* object) override {}
 };
 
 class GridStub : public GridDummy
diff --git a/targets/apps/HULC/main.cpp b/targets/apps/HULC/main.cpp
index e43ec64f9188463950c91d274431639cd75265b2..dfa3687d3e203ef80624c084ce41d0ae09b3f141 100644
--- a/targets/apps/HULC/main.cpp
+++ b/targets/apps/HULC/main.cpp
@@ -264,7 +264,7 @@ void multipleLevel(const std::string& configPath)
     //TriangularMesh* triangularMesh = TriangularMesh::make("D:/GRIDGENERATION/STL/quadarBinaer.stl", DiscretizationMethod::POINT_IN_OBJECT);
 
 
-    gridBuilder->addCoarseGrid(-10, -8, -3, 50, 20, 20, 0.25);
+    gridBuilder->addCoarseGrid(-12, -8, -3, 55, 20, 25, 0.5);
     TriangularMesh* triangularMesh = TriangularMesh::make("D:/GRIDGENERATION/STL/input/local_input/bruecke.stl", DiscretizationMethod::RAYCASTING);
 
 
@@ -276,7 +276,8 @@ void multipleLevel(const std::string& configPath)
     //STLWriter::writeSTL(sphere->triangleVec, "D:/GRIDGENERATION/STL/GTI2.stl", false);
 
     //gridBuilder->addGrid(new Sphere(20, 20, 20, 8));
-    gridBuilder->addGrid(triangularMesh, 2);
+    //gridBuilder->addGrid(triangularMesh, 2);
+    gridBuilder->addGeometry(triangularMesh);
 
     //gridBuilder->addFineGrid(new Cuboid(15, 15, 15, 25, 25, 25), 1);
     //gridBuilder->addFineGrid(new Cuboid(17, 17, 17, 23, 23, 23), 2);
@@ -290,9 +291,9 @@ void multipleLevel(const std::string& configPath)
 
     gridBuilder->buildGrids();
 
-    gridBuilder->writeGridToVTK("D:/GRIDGENERATION/gridTestSphere_level_0", 0);
-    gridBuilder->writeGridToVTK("D:/GRIDGENERATION/gridTestSphere_level_1", 1);
-    gridBuilder->writeGridToVTK("D:/GRIDGENERATION/gridTestSphere_level_2", 2);
+    gridBuilder->writeGridToVTK("D:/GRIDGENERATION/gridTestSphere_level_0.vtk", 0);
+    //gridBuilder->writeGridToVTK("D:/GRIDGENERATION/gridTestSphere_level_1", 1);
+    //gridBuilder->writeGridToVTK("D:/GRIDGENERATION/gridTestSphere_level_2", 2);
 
     //gridBuilder->writeGridToVTK("D:/GRIDGENERATION/gridTestCuboid_level_0", 0);
     //gridBuilder->writeGridToVTK("D:/GRIDGENERATION/gridTestCuboid_level_1", 1);