diff --git a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp
index a9023dfefd728bc45947aa008cf8a357676f9a7f..aad5b3bcf7f73f3394a03a6456448299fc766bec 100644
--- a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp
+++ b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.cpp
@@ -32,17 +32,7 @@ void MultipleGridBuilder::addGrid(Object* gridShape)
     addGridToListIfValid(grid);
 }
 
-void MultipleGridBuilder::addGrid(real startX, real startY, real startZ, real endX, real endY, real endZ)
-{
-    if (!coarseGridExists())
-        return emitNoCoarseGridExistsWarning();
-
-    const auto grid = makeGrid(startX, startY, startZ, endX, endY, endZ, getNumberOfLevels());
-
-    addGridToListIfValid(grid);
-}
-
-void MultipleGridBuilder::addFineGrid(Object* gridShape, uint levelFine)
+void MultipleGridBuilder::addGrid(Object* gridShape, uint levelFine)
 {
     if (!coarseGridExists())
         return emitNoCoarseGridExistsWarning();
@@ -52,7 +42,7 @@ void MultipleGridBuilder::addFineGrid(Object* gridShape, uint levelFine)
     const uint oldGridSize = this->getNumberOfLevels();
 
 
-    addIntermediateGridsToList(levelDifference, levelFine, nodesBetweenGrids, gridShape->clone());
+    addIntermediateGridsToList(levelDifference, levelFine, nodesBetweenGrids, gridShape);
     addFineGridToList(levelFine, gridShape->clone());
 
     eraseGridsFromListIfInvalid(oldGridSize);
@@ -75,54 +65,10 @@ void MultipleGridBuilder::addIntermediateGridsToList(uint levelDifference, uint
         for (int i = levelDifference - 1; i >= 0; i--)
         {
             const real scalingFactor = nodesBetweenGrids * spacings[i] * calculateDelta(levelFine);
-            gridShape->scale(scalingFactor);
+            Object* gridShapeClone = gridShape->clone();
+            gridShapeClone->scale(scalingFactor);
 
-            const auto grid = makeGrid(gridShape, level++);
-            grids.push_back(grid);
-        }
-    }
-}
-
-void MultipleGridBuilder::addFineGrid(real startXfine, real startYfine, real startZfine, real endXfine, real endYfine, real endZfine, uint levelFine)
-{
-    if (!coarseGridExists())
-        return emitNoCoarseGridExistsWarning();
-
-    const uint nodesBetweenGrids = 8;
-    const uint levelDifference = levelFine - getNumberOfLevels();
-    const uint oldGridSize = this->getNumberOfLevels();
-
-    addIntermediateGridsToList(levelDifference, levelFine, nodesBetweenGrids, startXfine, startYfine, startZfine, endXfine, endYfine, endZfine);
-    addFineGridToList(levelFine, startXfine, startYfine, startZfine, endXfine, endYfine, endZfine);
-
-    eraseGridsFromListIfInvalid(oldGridSize);
-}
-
-void MultipleGridBuilder::addFineGridToList(uint level, real startXfine, real startYfine, real startZfine, real endXfine, real endYfine, real endZfine)
-{
-    const auto grid = makeGrid(startXfine, startYfine, startZfine, endXfine, endYfine, endZfine, level);
-    grids.push_back(grid);
-}
-
-void MultipleGridBuilder::addIntermediateGridsToList(uint levelDifference, uint levelFine, uint nodesBetweenGrids, real startXfine, real startYfine, real startZfine, real endXfine, real endYfine, real endZfine)
-{
-    if (levelDifference > 0) 
-    {
-        auto spacings = getSpacingFactors(levelDifference);
-
-        // start = startFine - SUM(nodesBetweenGrids * 2^i * dxfine) 
-        uint level = getNumberOfLevels();
-        for (int i = levelDifference - 1; i >= 0; i--)
-        {
-            const real startX = startXfine - nodesBetweenGrids * spacings[i] * calculateDelta(levelFine);
-            const real startY = startYfine - nodesBetweenGrids * spacings[i] * calculateDelta(levelFine);
-            const real startZ = startZfine - nodesBetweenGrids * spacings[i] * calculateDelta(levelFine);
-
-            const real endX = endXfine + nodesBetweenGrids * spacings[i] * calculateDelta(levelFine);
-            const real endY = endYfine + nodesBetweenGrids * spacings[i] * calculateDelta(levelFine);
-            const real endZ = endZfine + nodesBetweenGrids * spacings[i] * calculateDelta(levelFine);
-
-            const auto grid = makeGrid(startX, startY, startZ, endX, endY, endZ, level++);
+            const auto grid = makeGrid(gridShapeClone, level++);
             grids.push_back(grid);
         }
     }
@@ -176,15 +122,6 @@ SPtr<Grid> MultipleGridBuilder::makeGrid(Object* gridShape, uint level) const
     return gridFactory->makeGrid(gridShape, staggeredCoordinates[0], staggeredCoordinates[1], staggeredCoordinates[2], staggeredCoordinates[3], staggeredCoordinates[4], staggeredCoordinates[5], delta);
 }
 
-SPtr<Grid> MultipleGridBuilder::makeGrid(real startX, real startY, real startZ, real endX, real endY, real endZ, uint level) const
-{
-    const real delta = calculateDelta(level);
-
-    auto staggeredCoordinates = getStaggeredCoordinates(startX, startY, startZ, endX, endY, endZ, delta);
-
-    return this->makeGrid(staggeredCoordinates[0], staggeredCoordinates[1], staggeredCoordinates[2], staggeredCoordinates[3], staggeredCoordinates[4], staggeredCoordinates[5], delta);
-}
-
 real MultipleGridBuilder::calculateDelta(uint level) const
 {
     real delta = this->getDelta(0);
@@ -197,13 +134,13 @@ std::array<real, 6> MultipleGridBuilder::getStaggeredCoordinates(real startX, re
 {
     auto offset = getOffset(delta);
 
-    const real startXStaggered = int(startX) + offset[0] - getDelta(getNumberOfLevels() - 1);
-    const real startYStaggered = int(startY) + offset[1] - getDelta(getNumberOfLevels() - 1);
-    const real startZStaggered = int(startZ) + offset[2] - getDelta(getNumberOfLevels() - 1);
+    const real startXStaggered = std::floor(startX) - offset[0];
+    const real startYStaggered = std::floor(startY) - offset[1];
+    const real startZStaggered = std::floor(startZ) - offset[2];
 
-    const real endXStaggered = int(endX) - offset[0] + getDelta(getNumberOfLevels() - 1);
-    const real endYStaggered = int(endY) - offset[1] + getDelta(getNumberOfLevels() - 1);
-    const real endZStaggered = int(endZ) - offset[2] + getDelta(getNumberOfLevels() - 1);
+    const real endXStaggered = std::ceil(endX) + offset[0];
+    const real endYStaggered = std::ceil(endY) + offset[1];
+    const real endZStaggered = std::ceil(endZ) + offset[2];
 
     return std::array<real, 6>{startXStaggered, startYStaggered, startZStaggered, endXStaggered, endYStaggered, endZStaggered};
 }
diff --git a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h
index 33509d4e155d5af196a64cb2c26684dc88f21004..3c4721a6c3e97969e322b448c7606c6973e976c7 100644
--- a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h
+++ b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilder.h
@@ -24,20 +24,7 @@ public:
 
     VF_PUBLIC void addCoarseGrid(real startX, real startY, real startZ, real endX, real endY, real endZ, real delta);
     VF_PUBLIC void addGrid(Object* gridShape);
-    VF_PUBLIC void addGrid(real startX, real startY, real startZ, real endX, real endY, real endZ);
-    VF_PUBLIC void addFineGrid(real startX, real startY, real startZ, real endX, real endY, real endZ, uint level);
-    VF_PUBLIC void addFineGrid(Object* gridShape, uint level);
-
-    
-    void addFineGridToList(uint level, Object* gridShape);
-    void addIntermediateGridsToList(uint levelDifference, uint levelFine, uint nodesBetweenGrids, Object* gridShape);
-
-    void addFineGridToList( uint level, real startXfine, real startYfine, real startZfine, real endXfine, real endYfine, real endZFine);
-
-    void addIntermediateGridsToList(uint levelDifference, uint levelFine, uint nodesBetweenGrids, real startXfine, real startYfine, real startZfine, real endXfine, real endYfine, real endZfine);
-    void eraseGridsFromListIfInvalid(uint oldSize);
-
-    void addGridToListIfValid(SPtr<Grid> grid);
+    VF_PUBLIC void addGrid(Object* gridShape, uint levelFine);
 
     VF_PUBLIC uint getNumberOfLevels() const;
     VF_PUBLIC real getDelta(uint level) const;
@@ -58,7 +45,12 @@ private:
     real calculateDelta(uint level) const;
     bool coarseGridExists() const;
     bool isGridInCoarseGrid(SPtr<Grid> grid) const;
-    SPtr<Grid> makeGrid(real startX, real startY, real startZ, real endX, real endY, real endZ, uint level) const;
+
+    void addFineGridToList(uint level, Object* gridShape);
+    void addIntermediateGridsToList(uint levelDifference, uint levelFine, uint nodesBetweenGrids, Object* gridShape);
+    void eraseGridsFromListIfInvalid(uint oldSize);
+    void addGridToListIfValid(SPtr<Grid> grid);
+
     std::array<real, 6> getStaggeredCoordinates(real startX, real startY, real startZ, real endX, real endY, real endZ, real delta) const;
     std::array<real, 3> getOffset(real delta) const;
     std::vector<uint> getSpacingFactors(uint levelDifference) const;
diff --git a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilderTest.cpp b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilderTest.cpp
index 529dd73a4a51c02b1e8b62d5c3c7a2aede3b313a..2e8936e46de904de311269727ef336046e30b35f 100644
--- a/src/GridGenerator/grid/GridBuilder/MultipleGridBuilderTest.cpp
+++ b/src/GridGenerator/grid/GridBuilder/MultipleGridBuilderTest.cpp
@@ -31,7 +31,7 @@ TEST_F(MultipleGridBuilderAddGridTest, addOneGrid_numberOfLevelsShouldBeOne)
 TEST_F(MultipleGridBuilderAddGridTest, addTwoGridsWhereSecondGridIsBigger_GridShouldNotAdded)
 {
     gridBuilder->addCoarseGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0, 1.0);
-    gridBuilder->addGrid(0.0, 0.0, 0.0, 20.0, 20.0, 20.0);
+    gridBuilder->addGrid(new Cuboid(0.0, 0.0, 0.0, 20.0, 20.0, 20.0));
     ASSERT_THAT(gridBuilder->getNumberOfLevels(), testing::Eq(1));
 }
 
@@ -40,14 +40,14 @@ TEST_F(MultipleGridBuilderAddGridTest, givenCoarseGrid_addAdditionalGrid_shouldC
     const real delta = 2.0;
     gridBuilder->addCoarseGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0, delta);
 
-    gridBuilder->addGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0);
+    gridBuilder->addGrid(new Cuboid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0));
 
     ASSERT_THAT(gridBuilder->getDelta(1), RealEq(delta * 0.5));
 }
 
 TEST_F(MultipleGridBuilderAddGridTest, addGridWithoutCoarseGrid_shouldNotbeAdded)
 {
-    gridBuilder->addGrid(0.0, 0.0, 0.0, 20.0, 20.0, 20.0);
+    gridBuilder->addGrid(new Cuboid(0.0, 0.0, 0.0, 20.0, 20.0, 20.0));
 
     ASSERT_THAT(gridBuilder->getNumberOfLevels(), testing::Eq(0));
 }
@@ -57,10 +57,10 @@ TEST_F(MultipleGridBuilderAddGridTest, addMultipleGrids_deltaShouldBeTheHalfOfTh
     const real delta = 2.0;
     gridBuilder->addCoarseGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0, delta);
 
-    gridBuilder->addGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0);
-    gridBuilder->addGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0);
-    gridBuilder->addGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0);
-    gridBuilder->addGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0);
+    gridBuilder->addGrid(new Cuboid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0));
+    gridBuilder->addGrid(new Cuboid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0));
+    gridBuilder->addGrid(new Cuboid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0));
+    gridBuilder->addGrid(new Cuboid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0));
 
     EXPECT_THAT(gridBuilder->getDelta(1), RealEq(delta / 2.0));
     EXPECT_THAT(gridBuilder->getDelta(2), RealEq(delta / 4.0));
@@ -73,9 +73,9 @@ TEST_F(MultipleGridBuilderAddGridTest, getInvalidLevel_shouldThrowException)
     ASSERT_THROW(gridBuilder->getDelta(0), std::exception);
 }
 
-TEST_F(MultipleGridBuilderAddGridTest, addFineGridWithoutCoarseGrid_ShouldNotAddingAGrid)
+TEST_F(MultipleGridBuilderAddGridTest, addGridWithoutCoarseGrid_ShouldNotAddingAGrid)
 {
-    gridBuilder->addFineGrid(0, 0, 0, 0, 0, 0, 0);
+    gridBuilder->addGrid(new Cuboid(0, 0, 0, 0, 0, 0), 0);
 
     ASSERT_THAT(gridBuilder->getNumberOfLevels(), testing::Eq(0));
 }
@@ -85,7 +85,7 @@ TEST_F(MultipleGridBuilderAddGridTest, addGridWithFloatingStartPoints_ShouldCrea
 {
     gridBuilder->addCoarseGrid(0.0, 0.0, 0.0, 15.0, 15.0, 15.0, 1);
 
-    gridBuilder->addGrid(0.1212, 0.1212, 0.221, 10.867, 10.45454, 10.12121);
+    gridBuilder->addGrid(new Cuboid(0.1212, 0.1212, 0.221, 10.867, 10.45454, 10.12121));
 
 
     EXPECT_THAT(gridBuilder->getStartX(1), RealEq(0.25));
@@ -101,9 +101,9 @@ TEST_F(MultipleGridBuilderAddGridTest, addGridWitNegativStartPoints_ShouldCreate
 {
     gridBuilder->addCoarseGrid(-100.0, -100.0, -100.0, 15.0, 15.0, 15.0, 1);
 
-    gridBuilder->addGrid(-20.0, -20.0, -20.0, -5.0, -5.0, -5.0);
+    gridBuilder->addGrid(new Cuboid(-20.0, -20.0, -20.0, -5.0, -5.0, -5.0));
 
-    gridBuilder->addGrid(-15.0, -15.0, -15.0, -10.0, -10.0, -10.0);
+    gridBuilder->addGrid(new Cuboid(-15.0, -15.0, -15.0, -10.0, -10.0, -10.0));
 
     EXPECT_THAT(gridBuilder->getStartX(2), RealEq(-15.625));
     EXPECT_THAT(gridBuilder->getStartY(2), RealEq(-15.625));
@@ -156,7 +156,7 @@ TEST_F(MultipleGridBuilderAddGridTest, addedsecondGrid_shouldBeStaggered)
     const real givenEndX = 10.0;
     const real givenEndY = 11.0;
     const real givenEndZ = 12.0;
-    gridBuilder->addGrid(givenStartX, givenStartY, givenStartZ, givenEndX, givenEndY, givenEndZ);
+    gridBuilder->addGrid(new Cuboid(givenStartX, givenStartY, givenStartZ, givenEndX, givenEndY, givenEndZ));
 
     const uint level = 1;
     const real staggeredOffset = 0.5 * gridBuilder->getDelta(level);
@@ -174,7 +174,7 @@ TEST_F(MultipleGridBuilderAddGridTest, addGridAfterCoarseGridWithFloatingStartPo
     const real givenEndX = 10.0;
     const real givenEndY = 11.0;
     const real givenEndZ = 12.0;
-    gridBuilder->addGrid(givenStartX, givenStartY, givenStartZ, givenEndX, givenEndY, givenEndZ);
+    gridBuilder->addGrid(new Cuboid(givenStartX, givenStartY, givenStartZ, givenEndX, givenEndY, givenEndZ));
 
     const uint level = 1;
 
@@ -200,8 +200,8 @@ TEST_F(MultipleGridBuilderAddGridTest, addedthirdGrid_shouldBeStaggered)
     const real givenEndY = 11.0;
     const real givenEndZ = 12.0;
 
-    gridBuilder->addGrid(givenStartX, givenStartY, givenStartZ, givenEndX, givenEndY, givenEndZ);
-    gridBuilder->addGrid(3.0, 4.0, 5.0, 5.0, 6.0, 7.0);
+    gridBuilder->addGrid(new Cuboid(givenStartX, givenStartY, givenStartZ, givenEndX, givenEndY, givenEndZ));
+    gridBuilder->addGrid(new Cuboid(3.0, 4.0, 5.0, 5.0, 6.0, 7.0));
 
     EXPECT_THAT(gridBuilder->getStartX(2), RealEq(3.375));
     EXPECT_THAT(gridBuilder->getStartY(2), RealEq(4.375));
@@ -219,7 +219,7 @@ TEST_F(MultipleGridBuilderAddGridTest, addsFineGridWithLevel_shouldCreateGridsBe
     gridBuilder->addCoarseGrid(-100.0, -100.0, -100.0, 100.0, 100.0, 100.0, 1.0);
 
     const uint level = 5;
-    gridBuilder->addFineGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0, level);
+    gridBuilder->addGrid(new Cuboid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0), level);
 
     ASSERT_THAT(gridBuilder->getNumberOfLevels(), testing::Eq(level + 1));
 }
@@ -230,7 +230,7 @@ TEST_F(MultipleGridBuilderAddGridTest, addsFineGridWithLevelThree_shouldCalculat
     gridBuilder->addCoarseGrid(-100.0, -100.0, -100.0, 100.0, 100.0, 100.0, 1.0);
 
     uint level = 3;
-    gridBuilder->addFineGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0, level);
+    gridBuilder->addGrid(new Cuboid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0), level);
 
     const real expectedDeltaLevel3 = startDelta / std::pow(2, level);
     EXPECT_THAT(gridBuilder->getDelta(level), RealEq(expectedDeltaLevel3));
@@ -249,7 +249,7 @@ TEST_F(MultipleGridBuilderAddGridTest, addsFineGridWithLevelThree_shouldCreateSt
     gridBuilder->addCoarseGrid(0.0, 0.0, 0.0, 100.0, 100.0, 100.0, 1.0);
 
     uint level = 3;
-    gridBuilder->addFineGrid(20.0, 20.0, 20.0, 40.0, 40.0, 40.0, level);
+    gridBuilder->addGrid(new Cuboid(20.0, 20.0, 20.0, 40.0, 40.0, 40.0), level);
 
     EXPECT_THAT(gridBuilder->getStartX(level), RealEq(20.4375));
     EXPECT_THAT(gridBuilder->getStartY(level), RealEq(20.4375));
@@ -272,7 +272,7 @@ TEST_F(MultipleGridBuilderAddGridTest, addsFineGridWithLevelThree_shouldCreateSt
     const real givenEndX = 40.0;
     const real givenEndY = 41.0;
     const real givenEndZ = 42.0;
-    gridBuilder->addFineGrid(givenStartX, givenStartY, givenStartZ, givenEndX, givenEndY, givenEndZ, level);
+    gridBuilder->addGrid(new Cuboid(givenStartX, givenStartY, givenStartZ, givenEndX, givenEndY, givenEndZ), level);
 
 
     const real expectedStartXLevel2 = givenStartX + 0.375 - 8.0 * gridBuilder->getDelta(2);
@@ -295,7 +295,7 @@ TEST_F(MultipleGridBuilderAddGridTest, addsFineGridWithLevelTwoWithCoarseGridSiz
 {
     gridBuilder->addCoarseGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0, 1.0);
 
-    gridBuilder->addFineGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0, 2);
+    gridBuilder->addGrid(new Cuboid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0), 2);
 
     ASSERT_THAT(gridBuilder->getNumberOfLevels(), testing::Eq(1));
 }
@@ -305,7 +305,7 @@ TEST_F(MultipleGridBuilderAddGridTest, addsFineGridWithLevelOne_shouldCreateStag
     gridBuilder->addCoarseGrid(0.0, 0.0, 0.0, 10.0, 10.0, 10.0, 1.0);
 
     const uint level = 1;
-    gridBuilder->addFineGrid(5.0, 5.0, 5.0, 7.0, 7.0, 7.0, level);
+    gridBuilder->addGrid(new Cuboid(5.0, 5.0, 5.0, 7.0, 7.0, 7.0), level);
 
     EXPECT_THAT(gridBuilder->getStartX(1), RealEq(5.25));
     EXPECT_THAT(gridBuilder->getStartY(1), RealEq(5.25));
@@ -321,7 +321,7 @@ TEST_F(MultipleGridBuilderAddGridTest, addsFineGridWithLevelTwo_shouldCreateStag
     gridBuilder->addCoarseGrid(-5.0, -5.0, -5.0, 12.0, 12.0, 12.0, 1.0);
 
     const uint level = 2;
-    gridBuilder->addFineGrid(5.0, 5.0, 5.0, 7.0, 7.0, 7.0, level);
+    gridBuilder->addGrid(new Cuboid(5.0, 5.0, 5.0, 7.0, 7.0, 7.0), level);
 
 
     EXPECT_THAT(gridBuilder->getStartX(2), RealEq(5.375));
@@ -336,10 +336,10 @@ TEST_F(MultipleGridBuilderAddGridTest, addsFineGridWithLevelTwo_shouldCreateStag
 TEST_F(MultipleGridBuilderAddGridTest, addsFineGridWithLevelTwoAndTwoGridsBefore_shouldCreateStaggeredStartAndEndPointFineGrid)
 {
     gridBuilder->addCoarseGrid(1.0, 4.0, 2.0, 30.0, 30.0, 30.0, 1.0);
-    gridBuilder->addGrid(5.0, 5.0, 5.0, 20.0, 20.0, 20.0);
+    gridBuilder->addGrid(new Cuboid(5.0, 5.0, 5.0, 20.0, 20.0, 20.0));
 
     const uint level = 2;
-    gridBuilder->addFineGrid(10.0, 10.0, 10.0, 12.0, 12.0, 12.0, level);
+    gridBuilder->addGrid(new Cuboid(10.0, 10.0, 10.0, 12.0, 12.0, 12.0), level);
 
     EXPECT_THAT(gridBuilder->getStartX(1), RealEq(5.25));
     EXPECT_THAT(gridBuilder->getStartY(1), RealEq(5.25));
@@ -361,10 +361,10 @@ TEST_F(MultipleGridBuilderAddGridTest, addsFineGridWithLevelTwoAndTwoGridsBefore
 TEST_F(MultipleGridBuilderAddGridTest, addsFineGridWithLevelTwoAndTwoGridsBeforeAndFloatingStartingPoints_shouldCreateStaggeredStartAndEndPointFineGrid)
 {
     gridBuilder->addCoarseGrid(1.2, 4.0, 2.0, 30.0, 30.0, 30.0, 1.0);
-    gridBuilder->addGrid(5.0, 5.0, 5.0, 20.0, 20.0, 20.0);
+    gridBuilder->addGrid(new Cuboid(5.0, 5.0, 5.0, 20.0, 20.0, 20.0));
 
     const uint level = 2;
-    gridBuilder->addFineGrid(10.0, 10.0, 10.0, 12.0, 12.0, 12.0, level);
+    gridBuilder->addGrid(new Cuboid(10.0, 10.0, 10.0, 12.0, 12.0, 12.0), level);
 
 
     EXPECT_THAT(gridBuilder->getStartX(2), RealEq(10.575));
@@ -383,7 +383,7 @@ TEST(MultipleGridBuilderTest, everyExceptTheFinestGrid_shouldHaveAGridInterface)
     gridFactory->setGrid("spy");
     auto gridBuilder = MultipleGridBuilder::makeShared(gridFactory);
     gridBuilder->addCoarseGrid(0.0, 0.0, 0.0, 15.0, 15.0, 15.0, 1.0);
-    gridBuilder->addFineGrid(7.0, 7.0, 7.0, 10.0, 10.0, 10.0, 2);
+    gridBuilder->addGrid(new Cuboid(7.0, 7.0, 7.0, 10.0, 10.0, 10.0), 2);
 
     gridBuilder->buildGrids();
 
@@ -401,7 +401,7 @@ TEST(MultipleGridBuilderTest, afterCreatingGridInterface_FineGridsShouldNotBeHav
     gridFactory->setGrid("spy");
     auto gridBuilder = MultipleGridBuilder::makeShared(gridFactory);
     gridBuilder->addCoarseGrid(0.0, 0.0, 0.0, 15.0, 15.0, 15.0, 1.0);
-    gridBuilder->addFineGrid(7.0, 7.0, 7.0, 10.0, 10.0, 10.0, 2);
+    gridBuilder->addGrid(new Cuboid(7.0, 7.0, 7.0, 10.0, 10.0, 10.0), 2);
 
     gridBuilder->buildGrids();
 
diff --git a/src/GridGenerator/grid/GridImp.cu b/src/GridGenerator/grid/GridImp.cu
index d0462b1226f6c1bb82b23809656f7fbe6915ddb3..b5053c490e1f591b48c1dfb754d771d2402c5d4e 100644
--- a/src/GridGenerator/grid/GridImp.cu
+++ b/src/GridGenerator/grid/GridImp.cu
@@ -43,13 +43,13 @@ HOST SPtr<GridImp> GridImp::makeShared(Object* object, real startX, real startY,
 
 void GridImp::initalNumberOfNodesAndSize()
 {
-    startX -= delta; // +1 stopper node
-    startY -= delta; // +1 stopper node
-    startZ -= delta; // +1 stopper node
+    //startX -= delta; // +1 stopper node
+    //startY -= delta; // +1 stopper node
+    //startZ -= delta; // +1 stopper node
 
-    endX += delta; // +1 stopper node
-    endY += delta; // +1 stopper node
-    endZ += delta; // +1 stopper node
+    //endX += delta; // +1 stopper node
+    //endY += delta; // +1 stopper node
+    //endZ += delta; // +1 stopper node
 
     const real length = endX - startX;
     const real width = endY - startY;
diff --git a/targets/apps/HULC/main.cpp b/targets/apps/HULC/main.cpp
index 389a8644e937ebc65649999594c541101048deb3..217cda264cfaa84432785aeb1614c8c7c503b339 100644
--- a/targets/apps/HULC/main.cpp
+++ b/targets/apps/HULC/main.cpp
@@ -249,10 +249,10 @@ void multipleLevel(const std::string& configPath)
 
 
     //gridBuilder->addGrid(new Sphere(20, 20, 20, 8));
-    //gridBuilder->addFineGrid(new Sphere(20, 20, 20, 8), 2);
+    gridBuilder->addGrid(new Sphere(20, 20, 20, 4), 3);
 
     //gridBuilder->addFineGrid(new Cuboid(15, 15, 15, 25, 25, 25), 1);
-    gridBuilder->addFineGrid(new Cuboid(17, 17, 17, 23, 23, 23), 2);
+    //gridBuilder->addFineGrid(new Cuboid(17, 17, 17, 23, 23, 23), 2);
 
 
     //gridBuilder->addFineGrid(17.0, 17.0, 17.0, 20.0, 20.0, 20.0, 3);